當往工程中加載多個本地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];