NSUserDefaultsで”mutating method sent to immutable object”

By | 2014年8月1日
この記事は公開されてから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です。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です