0

我正在尝试将一个对象添加到 nsuserdefault 中,但我得到了这个崩溃“[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object”它在这一行崩溃:[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];
}
4

2 回答 2

2

基本上它说您正在尝试在 NSArray 上使用 NSMutableArray 中的方法。

这是因为“从 NSUserDefaults 返回的值是不可变的,即使您将可变对象设置为值。”

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

将返回一个数组,而不是可变数组。您应该制作它的可变副本。

NSMutableArray *currentFav = [[[NSUserDefaults standardUserDefaults]objectForKey:@"fav"] mutableCopy];
于 2012-08-02T00:21:40.837 回答
0

您可以从 1 楼了解问题的原因。你可以用他的方法来解决你的问题,或者这样:

NSMutableArray *currentFav = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"fav"]];
于 2012-08-02T02:38:50.800 回答