使用[[NSBundle mainBundle] pathForResource获取.plist路径时出现问题

and*_*oza 4 iphone objective-c nsbundle

我是一个Objective C菜鸟,我不太了解以下问题.

此代码有效:

NSString *plistPath = @"/Users/andrewf/MyApp/Resources/Plates.plist";
dicPlates = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
Run Code Online (Sandbox Code Playgroud)

我的字典对象按预期加载了值.

此代码不起作用:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Plates" ofType:@"plist"];
dicPlates = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
Run Code Online (Sandbox Code Playgroud)

plistPath返回值为nil.无论我是否在调用中包含inDirectory:@"Resources",情况都是如此.尝试在Resources目录中打开.plist文件时,我发现的所有示例都不包含inDirectory.

我已经确认该文件存在于正确的位置,甚至可以重新创建它.

这似乎是一个简单的问题,但我很神秘.请协助.

Dav*_*ong 12

我觉得你对于在哪里pathForResource:看起来很困惑.

这有效:

NSString *plistPath = @"/Users/andrewf/MyApp/Resources/Plates.plist";
Run Code Online (Sandbox Code Playgroud)

请注意,此路径不指向您的应用程序.它指向您的项目目录.你的plist应该是在@/Users/andrewf/MyApp/build/Release/MyApp.app/Resources/Plist.plist"(一个iPhone应用程序,这将是不同的,更象@"/Users/andrewf/Library/Application Support/iPhone Simulator/User/Applicatons/(unique id)/MyApp.app/Resources/Plates.plist"),它是资源文件夹内您的应用程序pathForResource:期待.

这意味着您的资源不在构建目标的"复制包资源"阶段.您需要将它从"组和文件"区域拖到该阶段内.