与NSDictionary和plists挣扎

时间:2014-04-07 18:58:16

标签: objective-c cocos2d-iphone nsarray nsdictionary plist

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

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 个答案:

答案 0 :(得分: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对象更改为数组。

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