2012-08-02 100 views
0

我試圖將一個對象添加到nsuserdefault,但我得到這個崩潰 「[__NSCFArray insertObject:atIndex:]:變異的方法發送到不可變對象」 其在這條線崩潰: [ currentFav addObject:incomingBabe];添加對象碰撞

我不知道爲什麼它的崩潰,它在我的其他項目上工作。

這裏是我的代碼

-(IBAction)favorite { 
    NSUserDefaults *standardDefault = [NSUserDefaults standardUserDefaults]; 
    NSMutableArray *currentFav = [[NSUserDefaults standardUserDefaults]objectForKey:@"fav"]; 
    NSLog(@"strings stored = %@",currentFav); 
    NSMutableArray *newFav = [NSMutableArray arrayWithObject:[NSString stringWithFormat:@"bikini%02d.jpeg",self.currentNumber]]; 

if (currentFav == NULL){ 
    currentFav = [[NSMutableArray alloc]init]; 
    } 
    for(NSString *incomingBabe in newFav){ 
    BOOL hasStringAlready = NO; 
    for(NSString *currentFavorite in currentFav){ 
    if([currentFavorite isEqualToString:incomingBabe]){ 
    hasStringAlready = YES; 
    NSLog(@"has string already"); 
    break; 
    } 
    } 
if (!hasStringAlready) { 
    [currentFav addObject:incomingBabe]; 
    hasStringAlready = YES; 
    } 
} 

[standardDefault setObject:currentFav forKey:@"fav"]; 
[standardDefault synchronize]; 
} 

回答

2

基本上它說你總是試圖在NSArray中使用的方法從NSMutableArray裏。

這是因爲「從NSUserDefaults返回的值是不可變的,即使您將可變對象設置爲值。」

NSMutableArray *currentFav = [[NSUserDefaults standardUserDefaults]objectForKey:@"fav"]; 

將返回一個數組,而不是可變數組。你應該製作一個可變的副本。

NSMutableArray *currentFav = [[[NSUserDefaults standardUserDefaults]objectForKey:@"fav"] mutableCopy]; 
+0

這個工作!非常感謝 – 2012-08-02 00:27:57

0

你可以從1樓得到你的問題的原因。你可以用他的方法來解決你的問題,或者像這樣:

NSMutableArray *currentFav = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"fav"]];