在ios中添加对象崩溃

时间:2012-08-02 00:07:55

标签: objective-c ios xcode nsmutablearray nsuserdefaults

我正在尝试将对象添加到nsuserdefault中,但是我遇到了这个崩溃 “[__ NSCFArray insertObject:atIndex:]:发送到不可变对象的mutating方法” 它崩溃在这条线上: [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 个答案:

答案 0 :(得分:2)

基本上它说你试图在NSArray上使用NSMutableArray中的方法。

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

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

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

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

答案 1 :(得分:0)

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

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