6

我有一个包含 2 个字符串的数组的 plist,请参见图片:

http://imageshack.us/photo/my-images/263/myplist.png/

在我的viewDidLoad我添加这个:

NSString *file = [[NSBundle  mainBundle] pathForResource:@"Data"    ofType:@"plist"];

NSArray *array = [NSArray    arrayWithContentsOfFile:file];

NSLog(@"array = %@", array);

但我总是null为什么?感谢帮助。

更新:解决方案是您需要手动编辑plist文件(Xcode4默认使用Dictionnary)

<?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">
<array>
    <array>
        <string>HO</string>
        <string>HI</string>
    </array>
</array>
</plist>
4

5 回答 5

13

最有可能的是,您的 plist 是一个包含数组的字典(Xcode 4 不允许创建以数组作为根对象的 plist)。尝试这样的事情:

NSString *file = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:file];
NSArray *array = [dict objectForKey:@"Array"];
NSLog(@"%@", array);
于 2011-06-02T04:50:15.867 回答
0

正确答案是,根项已经是一个数组(在 XCode4 中.. 不确定其他项)。因此,如果您按照neil d在他的屏幕截图中显示的那样放置另一个数组,您最终将得到一个包含两个字符串值的数组的数组。

于 2012-02-29T03:51:42.803 回答
0

plist这种类型:

在此处输入图像描述

或(基本上两者都相同)

在此处输入图像描述

可以这样读:

NSString *file = [[NSBundle mainBundle] pathForResource:@"appFeatures" ofType:@"plist"];
_arrFeats = [NSArray arrayWithContentsOfFile:file];
NSLog(@"%i", _arrFeats.count);

appFeatures的名字在哪里plist。(iOS 6.1)

于 2013-03-12T12:54:21.273 回答
0

plist 应该以 Root Key 开头

在您的应用程序中,您需要更改根键名称,因为它不能是数据类型

于 2011-06-02T04:58:08.653 回答
0

我一直在研究这个主题并发现 plist 文件中的一些差异。

例如,我在使用该方法读取的示例代码中有原始 plist 文件
NSArray *array = [[NSArray alloc] initWithContentsOfFile:path];

xml原始文件是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"  
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<array>
<dict>
    <key>nameKey</key>
    <string>Number One</string>
    <key>imageKey</key>
    <string>small_one.png</string>
</dict>
<dict>
    <key>nameKey</key>
    <string>Number Two</string>
    <key>imageKey</key>
    <string>small_two.png</string>
</dict>

</array>        
</plist>

当我尝试在 Xcode 界面中创建相同的文件时,使用添加新文件属性列表,并在编辑后将项目以相同的方式显示在上述文件的界面中,该方法[[NSArray alloc] initWithContentsOfFile:path];失败,我发现了结构的问题xml plist 文件。使用 XCode 接口创建的文件,生成 xml plist 文件:

<plist version="1.0">
<dict>
<key>item 0</key>
<dict>
    <key>imageKey</key>
    <string>image1.jpg</string>
</dict>
<key>item 1</key>
<dict>
    <key>imageKey</key>
    <string>image2.jpg</string>
</dict>
</dict>
</plist>

我修复了与第一个示例相同的 xml 文件中的直接更改,并且该方法工作正常。

关键在于 plist 文件的 XCode 接口,您看不到这些差异。两者看起来一样。也许是我的 Xcode 4.1

于 2011-11-11T14:53:10.150 回答