在 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