当我为下面的链接创建一个简单的plist应用程序时:
http://iosdevelopertips.com/data-file-management/reading-a-plist-into-an-nsarray.html
当我调试它时...我正在获取我的plist文件的路径。但是,当我使用以下声明时
// Build the array from the plist
NSMutableArray *array2 = [[NSMutableArray alloc] initWithContentsOfFile:path];
我在array2中没有任何价值......可能是什么问题?
答案 0 :(得分:6)
这是我得到的最终解决方案......
当您使用第一个元素作为数组创建plist文件时,其XML内容将如下所示:
<?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>Root</key>
<array>
<string>Firecracker</string>
<string>Lemon Drop</string>
<string>Mojito</string>
</array>
</dict>
</plist>
这里你有不必要的标签,而不是我们应该拥有的标签,因为你的根元素必须是数组...因为你正在接受NSMutableArray对象......
所以你的plist文件必须像这样
<?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>
<string>Firecracker</string>
<string>Lemon Drop</string>
<string>Mojito</string>
</array>
</plist>
我检查过它的工作正常......
答案 1 :(得分:1)
问题可能是
nil
中获得array2
。nil
中也会显示array2
。使用NSString *path = [[NSBundle mainBundle] pathForResource:@"DrinkArray" ofType:@"plist"];
时,它假设您的应用包内有一个名为“DrinkArray”('DrinkArray.plist')的正确形成的plist文件。确保您的文件也被复制到应用程序包中(在Xcode中检查,单击您的项目,然后构建阶段,您的文件应出现在'Copy Bundle Ressources'中)。
我猜你得到nil
作为文件的路径,因此在array2
中。尝试记录您的路径字符串以进行检查。
答案 2 :(得分:0)
我想你可以尝试这样的事情:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
NSMutableArray *array = [dict objectForKey:@"Root"];
// Show the string values
for (NSString *str in array)
{
NSLog(@"--%@", str);
}
如果有帮助,请放下一行。 :)
干杯, 卡米尔
答案 3 :(得分:0)
在xcode 5中&gt;确保该文件位于编译源区域中。