无法读取plist

时间:2011-09-01 19:31:28

标签: ios xcode4 nsarray nsbundle

我正在尝试做一些我已经知道该怎么做的事 - 但它没有用。寻找解决这个问题的想法。我认为这与Xcode 4.1创建plist文件的方式有关。

我正在尝试从plist文件中读取字符串,并将它们转储到NSArray中。这是我的代码:

NSString *myFile = [[NSBundle mainBundle] 
                                 pathForResource:@"File1"ofType:@"plist"];

myArray = [[NSArray alloc]initWithContentsOfFile: myFile];

我在Xcode中创建了一个plist文件 - 顶层的一个数组和一些字符串。 myArray始终为null。我尝试在文本编辑器中打开plist,因为我在stackoverflow中的其他地方读到Xcode 4在顶层创建了一个带有Dictionary的plist。我手动编辑使其成为顶级的数组 - 没有成功。最后,我回到了顶层的dict并尝试将其读入NSDictionary - 也没有成功。

我在教程之后看过教程并在StackOverflow上阅读了一些类似的问题,但是我无法从plist文件中读取任何东西 - 它绝对存在于捆绑包中。我在Xcode中无数次重新创建了plist。感谢任何建议。

这是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">
<dict>
<key>New item</key>
<array>
    <string>Ping</string>
    <string>Pang</string>
    <string>Pong</string>
</array>
</dict>
</plist>

2 个答案:

答案 0 :(得分:0)

如果您只想加载plist,则需要使用属性列表序列化来首先将plist加载为NSData

[[NSData alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"File1"]]

然后使用

将其序列化为dict(或数组,具体取决于您的根项目)
NSDictionary *aDict = [NSPropertyListSerialization propertyListWithData: options: format: error:]

在Xcode中查看plist时,顶级元素是制作aDict的类型。

有关详细信息,请参阅此处:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/SerializePlist/SerializePlist.html

如果您希望将整个plist作为字符串加载,则可能需要使用NSString方法执行某些操作,例如[NSString stringFromData]

答案 1 :(得分:0)

.plist的根对象是dict,因此您需要将其作为NSDictionary加载到内存中。

myDictionary = [[NSDictionary alloc] initWithContentsOfFile: myFile];