9

NSMutableDictionary からオブジェクトを削除しようとすると、例外が発生します。関連するコードは次のとおりです。「設定」はメソッドに渡され、NSDictionary または NSMutableDictionary にすることができます。

 NSMutableDictionary *mutableSettings = nil;
 if ([settings isKindOfClass:[NSMutableDictionary class]])
     mutableSettings = (NSMutableDictionary *)settings;
 else 
     mutableSettings = [[[NSMutableDictionary alloc] initWithDictionary:settings] autorelease];

 [mutableSettings removeObjectForKey:@"akey"];

これはでクラッシュします

*キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。理由: '-[__NSCFDictionary removeObjectForKey:]: 変更メソッドが不変オブジェクトに送信されました'

これの何が問題なのですか?ありがとう。

4

1 に答える 1

10

ここでの問題は、クラスクラスターであるため、NSDictionaryとが両方としてNSMutableDictionary返さ__NSCFDictionaryれるclassことです。NSDictionary

settings変更可能かどうかに関係なく、辞書の変更可能なコピーを作成する必要があると思います。

NSMutableDictionary *mutableSettings = [settings mutableCopy];
于 2012-04-21T16:41:59.647 に答える