我有在iphone 4上运行的ios 7应用程序。我有一个奇怪的问题,其中应用程序在for循环中崩溃,因为标题中的错误。我检查了SO,它说当你改变你正在迭代的对象时会发生错误。 所以我将我使用的两个变量复制到临时变量,但问题仍然存在。 第一次迭代完成时会出现问题。
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"]];
}
}
}
答案 0 :(得分:2)
newBadges = badges
这不是副本,它只是对同一件事的另一个引用。您还应该期望来自用户默认值的字典(或数组)是可变的。所以,在这里制作一个可变的副本
newBadges = [badges mutableCopy]