Array无法从plist加载数据

问题描述:

我不确定我的问题到底是什么,因为我一直在使用此方法一段时间,并且从来没有遇到过这个问题。Array无法从plist加载数据

基本上,正如标题所说。此代码从位于“资源”组中的plist加载数据

NSString *myFile = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"plist"]; 
myArray = [[NSArray alloc]initWithContentsOfFile:myFile]; 
NSLog(@"%@", myArray); 

它显示(null)。有人知道为什么

我有相同的ViewController另一个设置和工作得很好。然而这个特殊的plist不加载。而且我甚至还删除了plist,并从另一个创建了一个副本,以确保不是结构问题。

我这样做是错误的吗?我应该使用FileManager吗?

UPDATE --------------------------------------------- ----------------------------

好吧,我简直不敢相信我即将说的话。大声笑

我正在使用XCode 4,您在Xcode中编辑plists的方式与Xcode 3.x不同。就像在早期的版本中,你可以选择plists的根目标是你希望他们(数组,字典等)我的问题是我试图加载到NSArray中的plist实际上是一个结构化的字典。但是我从来没有在Xcode中看到过这种情况,除了使用TextEdit或其他文本编辑器浏览内容之外,我不知道如何看到这一点。

非常愚蠢的我必须说。有谁知道为什么XCode 4不会像XCode 3.x那样显示plist的根?

的XCode 3.X:

的XCode 4:http://dl.dropbox.com/u/919254/Screen%20shot%202011-04-10%20at%202.30.35%20AM.png

改为使用字典。我用NSArrays和属性列表有未定义的行为。例如

NSString *myFile = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"plist"]; 
NSMutableDictionary* myDict = [[NSMutableDictionary alloc]initWithContentsOfFile:myFile]; 
NSLog(@"%@", myDict); 
+0

这工作...虽然我不明白为什么。plist的结构与我用于其余文件的结构完全相同。 :( – MrShoot 2011-04-10 15:18:12

+1

如果plist中的顶层对象是一个数组,则* *不能*使用'NSDictionary'或'NSMutableDictionary'来加载plist,反之亦然。这不是用户首选项的问题。 ,OP的问题是底层plist中的顶层对象是一个字典而不是数组,如果是这样的话,那么@ManuelDiaz发布了一个错误的plist文件示例 – jlehr 2011-04-10 15:28:47

+0

感谢您的澄清,我有这个未定义的行为Xcode 4也是如此。直到@Manuel Diaz更新Xcode 4才隐藏了plist root。 – David 2011-04-10 17:07:59

你有什么期待权。检查文件是否在正确的目录中,并且有内容。可能希望在登录myLog时使用NSLog。

+0

是的,该文件是在正确的目录。这里是我的日志http://dl.dropbox.com/u/919254/Screen%20shot%202011-04-10%20at%202.30.35%20AM.png和内容http://dl.dropbox.com/u /919254/Screen%20shot%202011-04-10%20at%202.33.37%20AM.png – MrShoot 2011-04-10 06:36:11

+0

一切正常,只需检查您发布的plist文件的根目录是一个字典(看起来像一个数组)。你在程序中使用了正确的名字。 – Jordan 2011-04-10 14:49:27

+0

这太奇怪了,不知何故,当我将plist加载到字典中时,它获得的值没有问题。然而,结构与我的其他plist完全相同,并且它们的加载方式与NSArrays相同! – MrShoot 2011-04-10 15:20:17

我也有类似的情况。解决:

  1. SELECT *的.plist树
  2. 调用右键菜单
  3. 选择 “打开外部编辑器”
  4. 根将是可见的 - 改变 “类” 到 “阵列”
  5. 保存