我是一名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。
我已确认该文件存在于正确的位置,甚至可以重新创建它。
这似乎是一个简单的问题,但我很神秘。请协助。
答案 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将找不到它。