2013-03-28 48 views
1

無法理解,爲什麼此行代碼返回(null)iOS中的pathForResource爲空

// Get path of data.plist file to be created 

plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]; 

我需要創建新的plist,但無法理解,不空文件應該被創建之前得到它的路徑。任何想法?

PS我現在只有h,m和沒有plist文件。

回答

7

部署後,您不會在您的包中創建新文件。該軟件包包含您的應用程序附帶的所有資源和文件。

而是在應用程序的「文檔」文件夾中創建新文件。要獲取的文件夾路徑,您可以使用這樣的方法(如包括在一些應用程序模板項目):

- (NSString *)applicationDocumentsDirectory { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; 
    return basePath; 
} 

然後你只需添加你要使用的文件名。

NSString *path = [self applicationDocumentsDirectory]; 
path = [path stringByAppendingPathComponent:@"data.plist"]; 

爲了組織的目的,您可能還想在「文檔」文件夾中增加一些文件夾。你可以使用NSFileManager來做到這一點。

+2

只需添加到這個正確答案,也可以不在'mainBundle'修改任何文件。 iOS上應用程序包中的所有文件都是隻讀的。 – rckoenes

-2

是的,你的猜測是對的 - 你需要先創建一個文件。下面是類的參考文檔說的話有關方法的返回值

「返回值 的完整路徑名的資源文件或零如果文件不能定位。

你可以這樣做類似於:

if ([ [NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]) 
    plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]; 
else 
    // Create new file here 

另外,如果您要搜索唯一文件名,則可以省略上面方法調用中的類型extenxion。

來源:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/Reference/Reference.html

+0

應該沒有必要檢查是否可以在捆綁包中找到文件。既然你知道它應該在那裏,因爲你只能添加文件到主包添加編譯時間。運行應用程序時,只能讀取一個文件,不能只顯示在那裏。 – rckoenes