0

このエラーで立ち往生しています。

かなり基本的なエラー

2012-07-20 12:44:07.462 Picsilk[4286:17903] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

これは、コードのどこかでオブジェクトを NSMutableArray ではなく NSArray に挿入しようとしていることを意味します。

insertObject:atIndex:ただし、アプリケーションではどこでもメソッドを使用しません。

真剣に、プロジェクト内のすべてのファイルで「挿入」を検索しましたが、何も見つかりませんでした。

ブレークポイントでいくつかの検索を行った後、 addObject を使用してオブジェクトに含まれるオブジェクトにオブジェクトNSMutableDictionaryを格納すると問題が発生するように見えることがわかりましたNSMutableArrayNSUserDefaults standardUserDefaults

NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];

if(![userDef objectForKey:@"somekey"])
    [userDef setObject:[[NSMutableArray alloc] init] forKey:@"somekey"];

NSMutableDictionary *data = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"somehtmlstring", @"someid", nil] forKeys:[NSArray arrayWithObjects:@"data",@"id", nil ]];


    [[userDef objectForKey:@"somekey"] addObject:data  ];

エラーはその最後の行で発生します。ただし、すべてが可変であることは確かです。このまま使わなくてNSUserDefaultsいいの?

また、これは明らかに私の実際のコードの骨抜きバージョンです。関連するすべてのものを含めたことは確かですが、必要に応じて実際のコード/目的を投稿できます。

ありがとう

4

1 に答える 1

4

NSUserDefaults通常のコレクションではありません。あなたが与えたものは何でも保持しません。-[NSUserDefaults objectForKey:]常に適切な型の不変オブジェクトを返します。

于 2012-07-20T20:44:22.293 に答える