JSON 仕様では、キーの順序は固定されていないと記載されていることに注意してください。その結果、キーが時々混ざり合い、述語を使用して JSON オブジェクトを取得できなくなります。NSJsonSerialization を使用して Core Data に格納/取得するための NSString を生成した後、この問題が発生しました。キーの順序が毎回異なるため、その JSON メッセージが既に存在するかどうかを確認できませんでした。
https://stackoverflow.com/a/15125704/876903も参照してください。
すべてのキーと値を順序付けられた配列に再帰的に配置する NSDictionary カテゴリを作成することにしました。これを使用して、これらの NSString と共にコア データ オブジェクトに格納されている NSDictionary オブジェクトが既に格納されているかどうかを確認しました。
したがって、私のコアデータオブジェクトには次のものが含まれていました。
- キー (ソートされた NSString)
- 値 (並べ替えられた NSString)
- メッセージ (変換可能な NSDictionary)
述語を使用して、JSON オブジェクトが次のように存在するかどうかを確認します。
[NSPredicate predicateWithFormat:@"(keys == %@) AND (values == %@)", sortedKeys, sortedValues];