私のプロジェクトでは、いくつかのjsonファイルをロードする必要があります。私はJSONKitでそれらを解析し、すべての解析後に
NSMutableDictionary *json = [myJSON objectFromJSONString];
私はそれらを次のような配列に追加します:
[self.themeArray addObject:json];
これは今のところうまく機能します。次に、ビューの間に辞書を渡す必要があります。これまでのところ同様に機能しますが、辞書オブジェクト->jsonにさらにいくつかのオブジェクトを追加する必要があります。jsonをNSMutableDictionaryとして宣言したとしても、JSONKitパーサーが変更不可能な辞書を作成しているように見えるため、オブジェクトを追加できません。
jsonディクショナリと追加のデータを並べて含むオブジェクトを作成することを考えていたので、jsonディクショナリを変更する必要はありません。変更する必要がないので、NSDictionaryに変更することもできます。しかし、それはどういうわけか私にはエレガントではないようです。
JSONKitライブラリを変更せずにこの問題を解決する方法を知っていますか?
前もって感謝します!
編集
コードを次のように変更してみました
NSMutableDictionary *json = [[myJSON objectFromJSONString] mutableCopy];
このようなもの
[[self.theme objectForKey:@"theme"] setObject:sender forKey:@"sender"];
[[self.theme objectForKey:@"theme"] setValue:sender forKey:@"sender"];
Xcodeは例外をスローします:
*キャッチされなかった例外'NSInternalInconsistencyException'が原因でアプリを終了しています、理由:'* -[JKDictionary setObject:forKey:]:変更メソッドが不変オブジェクトに送信されました'
上位の辞書にはまだネストされた辞書があるためだと思います。次に、すべての辞書を可変辞書にコピーするために、jsonオブジェクトを介して対話する必要がありますよね?
ギヨームが提案したように、おそらくNSJSONSerializationに切り替える方が良いでしょう。
編集
私はこのようなことを試しました
[self.theme setValue:sender forKey:@"sender"];
そしてそれは今動作します!思った通りでした。jsonオブジェクトのみが可変オブジェクトにコピーされました。おそらくあなたには明らかですが、それは私にはありませんでした。
よろしくお願いします!
編集
最後に、辞書データの奥深くにあるすべてのオブジェクトを変更可能なオブジェクトに変更できなかったため、コードを再度変更しました。私はJSONKitを破棄し、オプションNSJSONReadingMutableContainersを使用して、ここで推奨としてNSJSONDeserializationを使用します。私のコードはこのようになり、すべてのコンテナー(配列と辞書)も内部で変更可能です。私を幸せにする!;-)
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:myJSON options:NSJSONReadingMutableContainers error:&jsonParsingError];