私は現在、CoreDataを使用してiOSアプリに取り組んでいます。
アプリを初めて起動すると、RESTfulWebサービスに対して一連のWeb要求が行われます。
Webサービスは、2000以上のレコードを含むことができる一連のjson応答を提供します。
次に、これらのレコードが解析され、さまざまなコアデータエンティティに変換され、SQLite永続ストア内に保存されます。
この操作が完了したら、エンティティA内のすべての行をフェッチしてオブジェクトグラフを作成し(たとえば)、後で使用するオブジェクトグラフを作成します。
何らかの理由で、エンティティA内に格納されているすべてのNSManagedObjectを反復処理しているときに、一部のNSManagedObjectにプロパティ値がありません。
マルチスレッド環境で作業していることを考えると、別々のスレッドで別々のmanagedObjectContextsを作成していることを確認しました-ただし、最新のテスト実行中に、1つのスレッドのみがSQLite永続ストアから一度にデータを保存/取得します。
[context save:...]
また、json応答で返される2000以上のレコードをすべて解析するまで、操作を実行しないことにも注意してください。
何度か試行錯誤した結果、挿入ごとに保存を実行することで問題が解決することに気付きました。
たとえば、次のコードは問題なく機能します。
NSManagedObjectContext *context = ...
NSError *error = ...
for(id record in collectionOfRecords){
//create entity for insertion
[context save:&error]
}
ただし、これにより、プロパティ値が欠落するという問題が発生します。
NSManagedObjectContext *context = ...
NSError *error = ...
for(id record in collectionOfRecords){
//create entity for insertion
}
[context save:&error]
質問:
操作を実行する前にメモリに配置できるNSManagedObjectの最大数は[NSManagedObjectContext save:...]
ありますか?