我有一个包含2个字符串的数组的plist,请参阅image:
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>
答案 0 :(得分:13)
最有可能的是,你的plist是一个包含数组的字典(Xcode 4不允许创建以数组为根对象的plists)。尝试这样的事情:
NSString *file = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:file];
NSArray *array = [dict objectForKey:@"Array"];
NSLog(@"%@", array);
答案 1 :(得分:0)
在您的应用程序中,您需要更改根密钥名称,因为它不能是数据类型
答案 2 :(得分: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
答案 3 :(得分:0)
正确的答案是,根项IS已经是一个数组(在XCode4中......不确定其他的)。因此,如果您在其屏幕截图中显示另一个数组 neil d ,您将得到一个包含带有两个字符串值的数组的数组。
答案 4 :(得分:0)
plist
:
OR(基本上两者都相同)
可以这样读:
NSString *file = [[NSBundle mainBundle] pathForResource:@"appFeatures" ofType:@"plist"];
_arrFeats = [NSArray arrayWithContentsOfFile:file];
NSLog(@"%i", _arrFeats.count);
其中appFeatures
是plist
的名称。
(iOS 6.1)