< __ NSCFDictionary:0x1557f400>在被列举时被突变。'

时间:2015-10-25 20:08:04

标签: ios objective-c

我有在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"]];
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

newBadges = badges

这不是副本,它只是对同一件事的另一个引用。您还应该期望来自用户默认值的字典(或数组)是可变的。所以,在这里制作一个可变的副本

newBadges = [badges mutableCopy]