2011-10-15 23 views
21

我想添加一些靜態文件(圖像,二進制等)到我的應用程序。我將它們放在名爲Resources的文件夾下,並將其添加到我的XCode項目中。如何訪問項目中的本地文件

接下來,我將這些文件添加到Build Phases選項卡中的Copy Bundle Resources項目設置中。

不過,我似乎無法指他們以正確的方式。

例如,讀取二進制文件:

NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:@"data.bin"]; 
if(![is hasBytesAvailable]) NSLog(@"wrong"); 

這總是失敗&打印wrong

我嘗試過類似的方法與NSData initWithContentsOfFile:但這甚至不執行。另一個嘗試是使用[NSBundle mainBundle]但這也沒有完全執行。

我是新來的iOS,請幫助我可以使用本地文件!任何幫助,將不勝感激。

謝謝

+0

是否正確? iOS區分大小寫,因此'Data.BIN'和'data.bin'是兩個不同的文件。 – DarkDust

+0

全部小寫:( – chizzle

回答

28

您需要確保您在正確的位置訪問該文件。 Xcode會將您的資源文件放置在Resources目錄中的應用程序的「應用程序包」中。有很多方法可以挖掘出來。

的常用方法是獲得文件的路徑組合中的:

NSBundle *mainBundle = [NSBundle mainBundle]; 
NSString *myFile = [mainBundle pathForResource: @"data" ofType: @"bin"]; 

如果你在你的包在非標準的地方的其他文件,也有變化,以pathForResource,讓您指定目錄名稱。

如果你想看到模擬器使用,所以你可以檢查它的硬盤驅動器上的實際位置,你可以說:

NSLog(@"Main bundle path: %@", mainBundle); 
NSLog(@"myFile path: %@", myFile); 

搜索在Xcode中「捆綁編程指南」文檔庫開始。 :-)

+0

如果你使用上面的代碼(比如讓myFile返回null)找到你的應用程序包,在Xcode的build目錄中右鍵單擊它(查看它的內容),看看Xcode **實際上是否把「data .bin「文件。:-) –

+0

確實它給了我零迴路由'pathForResource'我刪除了所有資源並從頭開始添加它們。什麼是添加包的最佳方式?如何在項目上單擊鼠標右鍵並執行「將文件添加到」?' – chizzle

+0

您應該只能在目標的Build Phases設置的「Copy Bundle Resources」部分中使用「+」按鈕。同樣,如果你想看看Xcode在幕後做了什麼,使用Finder導航到'〜/ Library/Developer/Xcode/DerrivedData/{隨機小寫字母}名稱}/Build/Products/Debug-iphonesimulator'在「.app」文件中。這是你的軟件包,應該有你要求Xcode複製的文件。 –

1

使用NSBundle類爲該。例如:

NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"bin"]; 
NSInputStream *is = [[NSInputStream alloc] initWithFileAtPath:path]; 
... 
+1

我越來越***終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因:「*** - [NSURL initFileURLWithPath:]:零字符串參數」 ***第一擲調用堆棧: – chizzle

0

實際上調用[是開放]需要,即使你「initialiseWithFileAtPath」。我會認爲初始化會自動爲你打開文件,但它不會。

相關問題