看来我在这个循环中有一个逻辑问题。我正在尝试:
- 循环 myKeys(来自字典)以查找选定的玩家
- 在 NSMutableArray (thePlayers) 中为所选玩家设置三个 BOOL 参数(YES 或 NO)
- 使用“thePlayers”和“myKeys”更新字典 (selectedPlayerDict)
- 清空玩家并执行新的循环和相同的操作
各个玩家,当我分别选择每个玩家时,具有以下参数:
selectedPlayerDict:{Hannah = (0,0,1);}
selectedPlayerDict: { AAAXXX = ( 1, 1, 1 ); }
当选择两者时,意味着触发器打开(if ([theObjects objectAtIndex:3] == [NSNumber numberWithBool:YES])),我得到以下结果
selectedPlayerDict: { AAAXXX = ( 0, 0, 1, 1, 1, 1 ); Hannah = ( 0, 0, 1, 1, 1, 1 ); }
对于上面的结果,我使用:
//[thePlayers removeAllObjects]; //<<<<<<<<<<<<<<<<<<<<<<<<<<
当我更改并删除注释“//”时:
[thePlayers removeAllObjects]; //<<<<<<<<<<<<<<<<<<<<<<<<<<
我得到以下结果:
selectedPlayerDict: { AAAXXX = ( ); Hannah = ( ); }
我使用的代码是:
for (NSString *myKeys in allTheKeys) {
theObjects = [playerDict valueForKey:myKeys];
if ([theObjects objectAtIndex:3] == [NSNumber numberWithBool:YES]) {
//[thePlayers addObject:myKeys];
NSLog(@"Spelare: %@ är vald", myKeys);
NSLog(@">>>><<<<");
// Check what difficulties level
if ([theObjects objectAtIndex:0] == [NSNumber numberWithBool:YES]) { //hard
NSLog(@"Player have diff HARD");
[thePlayers addObject:[NSNumber numberWithBool:YES]]; //@"YES"];
}
else {
NSLog(@"Player have NOT diff HARD");
[thePlayers addObject:[NSNumber numberWithBool:NO]]; //@"NO"];
}
if ([theObjects objectAtIndex:1] == [NSNumber numberWithBool:YES]) { //medium
NSLog(@"Player have diff MEDIUM");
[thePlayers addObject:[NSNumber numberWithBool:YES]]; //@"YES"];
}
else {
NSLog(@"Player have NOT diff MEDIUM");
[thePlayers addObject:[NSNumber numberWithBool:NO]]; //@"NO"];
}
if ([theObjects objectAtIndex:2] == [NSNumber numberWithBool:YES]) { //easy
NSLog(@"Player have diff EASY");
[thePlayers addObject:[NSNumber numberWithBool:YES]]; //@"YES"];
}
else {
NSLog(@"Player have NOT diff EASY");
[thePlayers addObject:[NSNumber numberWithBool:NO]]; //@"NO"];
}
[selectedPlayerDict setValue:thePlayers forKey:myKeys];
[thePlayers removeAllObjects]; //<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}
NSLog(@"selectedPlayerDict: %@", selectedPlayerDict);
我知道我可能在逻辑上做错了什么,但我现在已经尝试了几个小时来试图理解我做错了什么。我不明白为什么 dic 的对象是空的,因为我在更新字典后在循环末尾的数组中“removeAllObjects”?我尝试过“setObject:forKey:”,但没有成功。
最佳答案
问题是您为 selectedPlayerDict 中的每个键重复使用相同的数组。您需要为每次循环迭代创建一个新数组;否则,removeAllObjects
将从单个数组中删除所有对象,该数组是字典中每个键的值。
作为旁注,我想知道 enum {Easy, Medium, Hard};
是否可以比 3 BOOL
更好地满足您的需求 - 如果用户选择了 > 1 个选项?
关于iphone - 循环数组并在 NSMutableDictionary 中保存对象不起作用?逻辑问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299591/