无法从plist读取

我正在尝试做一些我已经知道该怎么做的事情,但这并不奏效。 寻找想法来解决这个问题。 我认为这与Xcode 4.1创buildplist文件的方式有关。

我试图从一个plist文件中读取string,并将其转储到一个NSArray中。 这是我的代码:

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

我在Xcode中创build了一个plist文件 – 顶层数组和一些string。 myArray始终为空。 我试图在文本编辑器中打开plist,因为我在其他地方读到了stackoverflow,Xcode 4创build了顶级字典的plist。 我手动编辑,使其在顶层的数组 – 没有成功。 最后,我回到顶级字典,并试图将其读入NSDictionary – 也没有成功。

我在教程后观看了教程,并在StackOverflow上阅读了许多类似的问题,但是我无法从plist文件中读取任何东西 – 它肯定是在包中。 我已经无数次地在Xcode中重新创build了plist。 感谢任何build议。

这是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> 

.plist的根对象是一个dict ,所以你需要把它作为一个NSDictionary加载到内存NSDictionary

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

如果你只是想加载plist,你需要使用属性列表序列化来首先加载plist作为NSData

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

然后将其序列化为字典(或数组,取决于您的根项目)使用

 NSDictionary *aDict = [NSPropertyListSerialization propertyListWithData: options: format: error:] 

当你在Xcode中查看plist时,顶层元素是制作aDict的types。

请参阅这里获取更多信息: http : //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/SerializePlist/SerializePlist.html

如果你想把整个plist作为string加载,你可能需要用NSString方法做一些事情,比如[NSString stringFromData]