2015-10-25 60 views
1

我有iPhone 4上運行的ios 7應用程序。我有一個奇怪的問題,因爲標題中的錯誤,應用程序在循環內部崩潰。我檢查了SO,它說當你改變你正在迭代的對象時發生錯誤。 所以我複製了我用於臨時變量的兩個變量,但問題仍然存在。 第一次迭代結束時發生問題。<__ NSCFDictionary:0x1557f400>被列舉時發生了變異。'

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

'checkBadgeCondition'裏面發生了什麼?另外,您可能想要轉換爲Objective-C 2.0語法。也就是說,[tempBadge setObject:@「YES」forKey:@「archived」]'可以簡化爲'tempBage [@「archived」] = @「YES」'。 –

回答

2
newBadges = badges 

這不是一個副本,它只是一個參考,以同樣的事情。你也應該期望用戶默認的字典(或數組)是可變的。所以,在這裏做一個可變的副本

newBadges = [badges mutableCopy] 
相關問題