Ios <__NSCFDictionary:0x1557f400>;在被枚举时发生了变异;
我有一个iOS7应用程序,运行在iPhone4上。我有一个奇怪的问题,由于标题中的错误,应用程序在for循环内部崩溃。我勾选了SO,它说当您更改正在迭代的对象时会发生错误。 所以我把两个变量都复制到了临时变量中,但问题仍然存在。 问题发生在第一次迭代完成时Ios <__NSCFDictionary:0x1557f400>;在被枚举时发生了变异;,ios,objective-c,Ios,Objective C,我有一个iOS7应用程序,运行在iPhone4上。我有一个奇怪的问题,由于标题中的错误,应用程序在for循环内部崩溃。我勾选了SO,它说当您更改正在迭代的对象时会发生错误。 所以我把两个变量都复制到了临时变量中,但问题仍然存在。 问题发生在第一次迭代完成时 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary * badges = [defaults objectForK
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary * badges = [defaults objectForKey:@"badges"];
NSMutableDictionary *newBadges = badges;
for(NSString* key in badges)
{
NSDictionary* badge = [badges objectForKey:key];
if([[badge objectForKey:@"achived"] isEqual: @"NO"])
{
if([self checkBadgeCondition:badge])
{
NSMutableDictionary *tempBadge = [badge mutableCopy];
[self showAlertBadge:badge];
[tempBadge setObject:@"YES" forKey:@"achived"];
[newBadges setObject:tempBadge forKey:[tempBadge objectForKey:@"name"]];
}
}
}
这不是复制品,只是对同一事物的另一个引用。您还应该期望来自用户默认值的字典(或数组)是可变的。所以,在这里制作一个可变副本
newBadges = [badges mutableCopy]
checkBadgeCondition
内部发生了什么?此外,您可能希望转换为Objective-C2.0语法。也就是说,[tempBage setObject:@“YES”forKey:@“archived”]
可以简化为tempBage[@“archived”]=@“YES”
。
newBadges = [badges mutableCopy]