【问题标题】:Array does not load data from plist数组不从 plist 加载数据
【发布时间】:2011-08-02 08:17:57
【问题描述】:

我不确定我的问题到底是什么,因为我使用这种方法已经有一段时间了,从来没有遇到过这个问题。

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

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

它显示(空)。有人知道为什么吗?

我在同一个 ViewController 中有另一个设置并且工作得很好。但是,此特定 plist 不会加载。而且我什至还删除了 plist,只是从另一个创建了一个副本,以确保不是结构问题。

我做错了吗?我应该使用 FileManager 吗?

更新 ---------------------------------------------- --------------------------

好吧,我简直不敢相信我要说的话。哈哈

我使用的是 XCode 4,在 Xcode 中编辑 plist 的方式与 Xcode 3.x 不同。与早期版本一样,您可以选择 plist 的根,以使其成为您想要的(数组、字典等)。我的问题是,我试图加载到 NSArray 中的 plist 实际上结构为字典。但是我从来没有在 Xcode 中看到过这个,除了使用 TextEdit 或其他一些文本编辑器浏览内容之外,我不知道如何看到这个。

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

XCode 3.x:http://dl.dropbox.com/u/919254/XCode3.png

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

【问题讨论】:

    标签: iphone objective-c nsarray plist


    【解决方案1】:

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

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

    【讨论】:

    • 这行得通……虽然我不明白为什么。 plist 的结构与我用于其余文件的结构完全相同。 :(
    • 如果 plist 中的顶级对象是数组,您不能使用 NSDictionaryNSMutableDictionary 来加载 plist,反之亦然。这不是用户偏好的问题。显然,OP 的问题是底层 plist 中的顶级对象是字典而不是数组。如果是这种情况,那么@ManuelDiaz 发布了错误的示例 plist 文件。
    • 感谢您的澄清。我在 Xcode 4 中也有这种未定义的行为。直到@Manuel Diaz 更新 Xcode 4 隐藏 plist 根时才注意到。
    【解决方案2】:

    我也遇到过类似的情况。求解:

    1. 在树中选择 *.plist
    2. 调用上下文菜单
    3. 选择“使用外部编辑器打开”
    4. root 将可见 - 将“Class”更改为“Array”
    5. 保存

    【讨论】:

      【解决方案3】:

      你所拥有的看起来是对的。检查文件是否在正确的目录中,并且有内容。可能想在您使用时对 myFile 进行 NSLog。

      【讨论】:

      • 是的,文件在正确的目录中。这是我的日志dl.dropbox.com/u/919254/… 和内容dl.dropbox.com/u/919254/…
      • 一切正常,只需检查您发布的 plist 文件的根目录是否为字典(看起来像一个数组)。而且您在程序中使用了正确的名称。
      • 这太奇怪了,不知何故,当我将 plist 加载到字典中时,它得到的值没有问题。但是结构与我的其他 plist 完全相同,它们作为 NSArrays 加载!
      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      相关资源
      最近更新 更多