4

我是一个 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 。

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

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

4

3 回答 3

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"),并且它位于正在查找的应用程序的Resources 文件夹中pathForResource:

这意味着您的资源不在构建目标的“复制捆绑资源”阶段。您需要将其从 Groups and Files 区域拖到该阶段内。

于 2009-11-17T16:08:07.940 回答
3

我发现了问题!

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

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

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

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

于 2009-11-17T20:20:31.603 回答
0

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

如果文件没有添加到目标中,它就不会在构建产品中,NSBundle 也不会找到它。

于 2009-11-17T16:03:51.770 回答