在iOS中,pathForResource为空

时间:2013-03-28 12:27:43

标签: ios objective-c xcode cocoa-touch plist

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

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

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

我需要创建新的plist但是无法理解,是否应该在创建空文件之前获取它的路径..任何想法?

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

2 个答案:

答案 0 :(得分: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来执行此操作。

答案 1 :(得分:-2)

是的,您的猜测是正确的 - 您需要先创建一个文件。以下是类引用文档对方法的返回值

所说的内容

“返回值 资源文件的完整路径名,如果无法找到该文件,则 nil。

您可以执行以下操作:

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