FC2ブログ
思い出になる前に書いておく忘備録的iPhone奮闘記
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

というエラーでハマってしまったのでメモ。

immutableなオブジェクトにmutableなものを送ってしまってると言われ、[NSMutableArray alloc]を間違えて[NSArray alloc]とでもしてるのかと思ってよく見なおしてみたけど、間違ってなかった。

結論から言うと、実は、コードの見た目的には問題はなくて、
NSUserDefaultsにmutableなオブジェクトを保存しても、取り出すとimmutableなオブジェクトが返る
というのがポイントでした。
なので、mutableなオブジェクトが必要な場合はmutableCopyを使って作り直す必要があるようです。


NSMutableArray *mutableArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"hoge"];
[mutableArray insertObject:testObject atIndex:0];

としていたのですが、[mutableArray insertObject:testObject atIndex:0];が呼ばれた時にアプリが落ちてしまっていました。
NSUserDefaultsからmutableなArrayを取り出していたつもりが、実際はimmutableなオブジェクトが返っていたので、上記のようなエラーが出ていたんですね。

というわけで、上記のコードを以下のようにしてやりました。

NSMutableArray *mutableArray = [[[NSUserDefaults standardUserDefaults] objectForKey:@"hoge"] mutableCopy];
[mutableArray insertObject:testObject atIndex:0];


これで問題は解決したようです。

では、これからサブミットしてたアプリを自らリジェクトしてサブミットしなおしてきます。
スポンサーサイト



  1. Edit
  2. | Permalink
  3. | Category:iPhone
  4. | トラックバック:0
  5. | コメント:0
  6. |
コメント









:

トラックバックURL
http://yoshiminu.blog.fc2.com/tb.php/6-6d9f0adc
この記事にトラックバックする(FC2ブログユーザー)