解析 plist 文件并获取键的值

Posted

技术标签:

【中文标题】解析 plist 文件并获取键的值【英文标题】:Parse plist file and get value for key 【发布时间】:2013-05-27 14:41:30 【问题描述】:

我在下面有这个文件:

我有一个问题,如何从这个 plist 文件中获取 url 值。

我已将此文件转换为 NSDictionary,它包含所有键和值。

我添加了这一行来检查它是如何工作的

 NSLog(@"%@", [[[[source objectForKey:@"Root"] objectForKey:@"updates"] objectForKey:@"Item 0"] objectForKey:@"url"]);

但它返回 (null) 而不是 someurl1。

source - 这是我的 NSDictionary 实例变量。

我的 NSDictionary 对象的这个日志

(NSDictionary *) $1 = 0x0ab38b60 
    plist =     
        dict =         
            array =             
                dict =                 (
                                        
                        integer = 4;
                        key =                         (
                            id,
                            url,
                            compression
                        );
                        string = "http://someurl1";
                        true = "";
                    ,
                                        
                        integer = 5;
                        key =                         (
                            id,
                            url,
                            compression
                        );
                        string = "http://someurl2";
                        true = "";
                    
                );
            ;
            key = updates;
        ;
        version = "1.0";
    ;

【问题讨论】:

objectForKey: 无法访问数组的项。 Item 0可以通过objectAtIndex:访问。 感谢您的回复。我试过 NSLog(@"%@", [[[[source objectForKey:@"Root"] objectForKey:@"updates"] objectAtIndex:0] objectForKey:@"url"]);但它仍然输出 null [source objectForKey:@"Root"] 输出什么?您可能不需要按名称获取该对象 - 毕竟它是根对象。 【参考方案1】:

试试:

for (NSDictionary *item in [source objectForKey:@"updates"]) 

    NSLog(@"%@", [item objectForKey:@"url"]);

请注意,'Root' 不是键,它只是 Xcode 显示 plist 的方式。而且您需要遍历一个数组,同样,“Item 0”就是它在 IDE 中的显示方式。

【讨论】:

我已经用 NSLog 为我的 NSDictionary 更新了我的问题。可能是键的一些问题。 NSLog(@"%@", [source objectForKey:@"updates"]);也返回 null 您的字典日志与 Xcode 屏幕截图的相似度为零。您加载了不同的 plist 或者您是如何加载的? 我试过这个 NSDictionary *rootDictionary = [NSDictionary dictionaryWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"PListFile" ofType:@"plist"]];它有效。无论如何感谢您的帮助。这是我获取字典的错误【参考方案2】:

很好。

试试这个代码。

NSDictionary *rootDictionary = [NSDictionary dictionaryWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"PListFile" ofType:@"plist"]];
NSLog(@"%@", [[[rootDictionary objectForKey:@"updates"] objectAtIndex:0] objectForKey:@"url"]);

【讨论】:

以上是关于解析 plist 文件并获取键的值的主要内容,如果未能解决你的问题,请参考以下文章

Info.plist 中 CFBundleDocumentTypes 键的值必须是字典数组

cocos2dx-深度解析plist文件(游戏对象的数据如何从plist创建获取)

Swift 3 - 从 plist 的所有数组中获取所有项目

如何从 .env 文件中获取键的值?

Android解析Plist文件

如何将此 .plist 文件直接解析为 Swift 中的对象?