dictionaryWithContentsOfFile从我的属性列表文件返回nil

Mat*_*tyG 7 iphone properties objective-c nsdictionary plist

我正在学习如何使用plist文件在我的iPhone应用程序中存储数据.我在这个网站上一直在阅读关于plist和dictionaryWithContentsOfFile的一堆问题,但看不出我做错了什么.

以下行返回nil("字典为空"到控制台).

NSLog(@"The dictionary is %@",[NSDictionary dictionaryWithContentsOfFile:@"myFile"]);
Run Code Online (Sandbox Code Playgroud)

myFile.plist文件位于resources文件夹中,包含一些字符串:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>name</key>
    <string>john</string>
    <key>aname</key>
    <string>jen</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

Dav*_*ong 36

从文档......

+ (id)dictionaryWithContentsOfFile:(NSString *)path

参数

路径

完整或相对路径名.由path标识的文件必须包含属性列表的字符串表示形式,其根对象是字典.

回报价值

包含路径中字典的新字典,如果存在文件错误或文件内容是字典的无效表示,则为nil.

因此,您可能需要构建plist文件的完整路径(或传递适当的相对路径.如果"myFile"是一个合适的相对路径,我会非常惊讶).如果你构建一个正确的路径但仍然nil回来,那么你可能得到了一个无效的plist文件.

获取资源文件夹中文件路径的最简单方法是这样的:

NSString * plistPath = [[NSBundle mainBundle] pathForResource:@"myFile" ofType:@"plist"];
Run Code Online (Sandbox Code Playgroud)

这将在Resources文件夹中为名为"myFile.plist"的文件构建一个路径.

  • mainBundle方法的+1.当人们试图找到他们的捆绑路径时(当然没有`[NSBundle mainBunde])并构建他们自己的资源路径时,它会伤到我的眼睛...... (3认同)