この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
NSUserDefaultsを使用して取り出した配列にデータを追加して保存する際、下記にエラーになりました。
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object' *** First throw call stack:
immutable(不変)なオブジェクトを書き換えようとしたようです。
NSUserDefaultsはimmutableなオブジェクトを返しますので、NSDictionaryやNSArrayなどオブジェクト集合に対して操作する場合はmutableCopyでインスタンスの可変コピーを取得するように書き換えます。
修正前。
NSMutableArray *favList = [[NSUserDefaults standardUserDefaults] objectForKey:@"key"]; [favList addObject:@"object"]; [[NSUserDefaults standardUserDefaults] setObject:favList forKey:@"key"]; [[NSUserDefaults standardUserDefaults] synchronize];
修正後。
NSMutableArray *favList = [[[NSUserDefaults standardUserDefaults] objectForKey:@"key"] mutableCopy]; [favList addObject:@"object"]; [[NSUserDefaults standardUserDefaults] setObject:favList forKey:@"key"]; [[NSUserDefaults standardUserDefaults] synchronize];
これでOKです。