makotton.com

NSUserDefaultsで”mutating method sent to immutable object”

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

NSUserDefaultsを使用して取り出した配列にデータを追加して保存する際、下記にエラーになりました。

[bash gutter=”0″]
*** Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object’
*** First throw call stack:
[/bash]

immutable(不変)なオブジェクトを書き換えようとしたようです。

NSUserDefaultsはimmutableなオブジェクトを返しますので、NSDictionaryやNSArrayなどオブジェクト集合に対して操作する場合はmutableCopyでインスタンスの可変コピーを取得するように書き換えます。

修正前。

[bash]
NSMutableArray *favList = [[NSUserDefaults standardUserDefaults] objectForKey:@"key"];
[favList addObject:@"object"];
[[NSUserDefaults standardUserDefaults] setObject:favList forKey:@"key"];
[[NSUserDefaults standardUserDefaults] synchronize];
[/bash]

修正後。

[bash highlight=”1″]
NSMutableArray *favList = [[[NSUserDefaults standardUserDefaults] objectForKey:@"key"] mutableCopy];
[favList addObject:@"object"];
[[NSUserDefaults standardUserDefaults] setObject:favList forKey:@"key"];
[[NSUserDefaults standardUserDefaults] synchronize];
[/bash]

これでOKです。

 

モバイルバージョンを終了