1

无法理解,为什么这行代码返回(null)

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

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

我需要创建新的 plist 但不明白,是否应该先创建空文件才能获取它的路径。有什么想法吗?

PS 我现在的项目中只有 h,m 并且没有 plist 文件。

4

2 回答 2

7

部署后,您不会在包中创建新文件。该捆绑包包含您的应用程序附带的所有资源和文件。

相反,您在应用的 Documents 文件夹中创建新文件。要获取文档文件夹路径,您可以使用这样的方法(包括在一些应用程序模板项目中):

- (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"];

出于组织目的,您可能还希望在 Documents 文件夹中添加一些其他文件夹。你可以用它NSFileManager来做到这一点。

于 2013-03-28T12:32:41.590 回答
-2

是的,您的猜测是正确的——您需要先创建一个文件。以下是类参考文档中关于方法返回值的内容

"返回值资源文件的完整路径名,如果找不到文件,则返回 nil。 "

您可以执行以下操作:

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

此外,如果您正在搜索唯一的文件名,则可以在上面的方法调用中省略类型扩展名。

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

于 2013-03-28T12:36:27.360 回答