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 に答える