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

时间:2009-11-17 15:46:38

标签: iphone objective-c nsbundle

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

此代码有效:

NSString *plistPath = @"/Users/andrewf/MyApp/Resources/Plates.plist";
dicPlates = [[NSDictionary alloc] initWithContentsOfFile:plistPath];

我的词典对象按预期加载了值。

此代码不起作用:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Plates" ofType:@"plist"];
dicPlates = [[NSDictionary alloc] initWithContentsOfFile:plistPath];

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

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

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

3 个答案:

答案 0 :(得分:12)

我认为你对pathForResource:的目标感到困惑。

这有效:

NSString *plistPath = @"/Users/andrewf/MyApp/Resources/Plates.plist";

请注意,此路径未指向您的应用程序。它指向您的项目目录。您的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"),并且它位于您的应用程序的文件夹 { {1}}正在寻找。

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

答案 1 :(得分:3)

我找到了问题!

.plist文件已正确包含在目标中。

最初创建.plist时,我将文件命名为“plates.plist”。创建文件后,我立即将其重命名为“Plates.plist”,这就是我今后使用的。

即使文件在我的资源文件夹,目标部分和上面提到的iPhone模拟器位置中被命名为“Plates.plist”,该文件也被命名为“plates.plist”。奇怪的是,文件的内容仍然正确更新。

现在我已经更改了代码以引用“plates.plist”,并将Resources文件夹中的文件重命名为相同的文件,一切正常。我只能假设这是iPhone SDK中的一个错误。

答案 2 :(得分:0)

检查Xcode中是否已将plates.plist文件添加到目标。

如果文件未添加到目标,则它不会在构建产品中,并且NSBundle将找不到它。