NSUserDefaultsで”mutating method sent to immutable object”

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

 


コメントを残す

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

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください