当往工程中加载多个本地HTML文件时,经常会出现“项目.app”下的包内容文件显示了我们导入的所有的HTML文件,但是却没有文件夹,这是以下造成的;
如果将资源文件/文件夹拖入项目,那么会Xcode弹出一个窗口:
Destination:
意思是说是否要在项目目录下复制资源。
如果选中Copy items if needed,那么在项目目录下(这是说的是真实目录,不是Xcode左侧那个),会拷贝一份与拖入的资源相同的资源。
如果未选中,则不会进行拷贝,而是对拖入的资源进行引用。
这与在代码中进行传值和传址很像。如果选中,则像传值,会拷贝一份,与原来的资源互不影响;如果未选中,则像传址,相当于对原来的资源进行引用。
事实上如果未选中,会带来一些问题。比如当代码和资源分开(比如不在一个电脑上),那么对原来资源的引用就失效了,那么资源也就不能用了。
并且在删除项目资源的时候也要注意。当删除资源时,会弹出一个窗口,让我们选择是删除引用还是移到垃圾箱。
如果选中Copy items if needed,那么会有一份拷贝,所以我们如果想彻底删除,那么要选择移到垃圾箱,这样无论在Xcode左侧的导航里还是真正的项目目录里,都将资源删除了。如果选择了删除引用,那么只会删除Xcode左侧导航的资源名称,而资源的拷贝还存在于项目的真实目录中。
如果未选中Copy items if needed,那么如果想正确删除,应该是选择删除引用,这样这个项目就不再对原来的资源进行引用。但是如果选择了移到垃圾箱,那么会将原来的资源也一起删除,即使它并不在你的项目目录里。要慎重。
Added folders:
如果是文件,那么无论选择Create groups还是Create folder references都是一样的。
如果是文件夹:
如果选择Create groups,那么说明在真实的项目目录里面(MainBundle),并不会创建文件夹。比如拖进一个文件夹,里面有两张图片还有一个子文件夹,子文件夹里面还有一张图片,如果选择了Create groups,那么这个结构在Xcode左侧是一致的,但是在项目目录里面,并没有创建文件夹,直接是三张图片。如果用imageNamed:这个方法,可以直接用图片的名字,前面不用加文件夹的名字,因为imageNamed:是看真实的项目目录里面的结构,而不是Xcode左侧的文件结构。(左侧如果是蓝色文件夹,那么是实体文件夹;如果是黄色文件夹,那么是虚拟文件夹,在真实的目录实际是没有的。)
如果选择了Create folder references,那么会根据传入的文件夹结构,创建蓝色的文件夹,也就是在真实的项目目录里会创建文件夹。如果此时用imageNamed:方法,那么需要加上路径:
UIImage *image = [UIImage imageNamed: @”Images/image”];
总结就是如果传入一个文件夹资源,Create groups不会创建真实文件夹;Create folder references会创建真实文件夹。
Add to targets:
意思是是否将这个资源包打包到最终的资源包里面。
我们将程序安装到手机上,实际上是将其打包然后安装,如果没有选择这个选项,那么导入的资源将不会参与打包。
作者:左岸花不开
主要就是我们拖拽进工程的文件,在“项目.app”下是创建的虚拟文件夹导致。附上一个demo参考(注:文件拖拽,必须选择 create folder reference ,以创建对应的真实文件夹)。
UIWebView *webView=[[UIWebView alloc] initWithFrame:self.view.frame];
[self.view addSubview:webView];
NSString *path = [[NSBundle mainBundle] resourcePath];//pathForResource:@"index" ofType:@"html"
NSString *path1 =[NSString stringWithFormat:@"%@%@",path,@"/新手帮助/index.html"];
// NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
NSURL *baseURL = [NSURL fileURLWithPath:path1];
// NSString *path2= @"/Users/fgtk/Desktop/HTML_3/HTML_3/新手帮助/index.html";
NSLog(@"%@",path1); //
NSString *html = [NSString stringWithContentsOfFile:path1 encoding:NSUTF8StringEncoding error:nil];
[webView loadHTMLString:html baseURL:baseURL];