【问题标题】:pathForResource is empty in iOSiOS 中的 pathForResource 为空
【发布时间】:2013-03-28 12:27:42
【问题描述】:

看不懂,为什么这行代码返回(null)

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    相反,您在应用的 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 来执行此操作。

    【讨论】:

    • 只是为了添加到这个正确答案,您也不能更改mainBundle 中的任何文件。 iOS 上的应用程序包中的所有文件都是只读的。
    【解决方案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

    【讨论】:

    • 无需检查是否可以在捆绑包中找到该文件。由于您事先知道它应该在那里,因为您只能将文件添加到主包添加编译时间。运行您的应用程序时,捆绑包是只读的,文件不能只出现在那里。
    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多