2012-08-02 101 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"]];