在 NSDictionary 和 plists 中苦苦挣扎

Posted

技术标签:

【中文标题】在 NSDictionary 和 plists 中苦苦挣扎【英文标题】:Struggling with NSDictionary and plists 【发布时间】:2014-04-07 18:58:16 【问题描述】:

我正在尝试搜索 plist,查找 Available 是否为真。 这是我的清单。

plist 图片:http://imgur.com/24vtIEW

在搜索 Cocos2D 论坛和此处后,我设法尝试了自己的努力,但并没有走得太远。

这是代码。

NSString  *fullPathToPList = [[NSBundle mainBundle] pathForResource:@"missions" ofType:@"plist"];
NSArray  *MissionsList;
NSDictionary  *plistDict;
NSInteger     pIdx, mCount;

plistDict = [NSDictionary dictionaryWithContentsOfFile: fullPathToPList];
MissionsList = [plistDict valueForKey: @"Missions"];
mCount = [MissionsList count];
NSLog(@"Number of Missions in plist = %d", mCount);

for (pIdx = 0; pIdx < mCount; pIdx++)

NSDictionary *eachMission = [MissionsList objectAtIndex: pIdx];
NSString *MissionName = [eachMission valueForKey: @"mission name"];
NSString *Available = [eachMission valueForKey: @"Available"];

NSLog(@"\nMission[%d] \nName = %@, \nAvailable = %@", pIdx, MissionName, Available);

我想在这里发生的事情是让它回来

Mission 1
Name = First Mission
Available = 1

我们将不胜感激任何正确方向的帮助。

【问题讨论】:

1) 使用objectForKey,而不是valueForKey 来获取字典的内容(除非你明确地做了一些“键值编码”魔法)。 - 2) "Missions" 键的值似乎是 dictionary,而不是 array 【参考方案1】:

根据您的图片Missions 是字典而不是数组。所以你需要以不同的方式阅读它们。

NSDictionary *plistDict = ...;
NSDictionary *missions = [plistDict objectForKey:@"Missions"];
[missions enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSDictionary *mission, BOOL *stop) 
    NSString *missionName = [mission objectForKey:@"mission name"];
    NSNumber *available = [mission objectForKey:@"Available"];

    NSLog(@"Mission: %@, Name = %@, Available = %@", key, missionName, available);
];

请注意,您不一定会按照字典中定义的顺序恢复任务。因此,您也无法获得索引。如果需要知道索引,则需要在plist中将Missions对象改为数组。

还要注意Available 在您的plist 中定义为boolean,因此您应该将值存储在NSNumber 中。

【讨论】:

以上是关于在 NSDictionary 和 plists 中苦苦挣扎的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PLIST 中访问嵌套的 NSDictionary?

来自 plist 文件的 NSArray 或 NSDictionary

.plist 数据无法从 NSArray 加载到 NSDictionary

将 NSDictionary 保存到 plist

无法创建 Plist 文件。 iOS+NSDictionary+JSON

如何使用 Swift 将新数组数据添加到 plist 文件中的 NSDictionary