これはややこしいことです。コアデータ関係、複数の管理オブジェクトコンテキストおよびスレッド
私はDocument
エンティティを持っています。現在、バックグラウンドスレッド上のSQLiteデータベースからCoreDataにインポートされています。バックグラウンドスレッドのための別のコンテキストがあり、私は500エントリごとに保存をバッチしています。
バックグラウンドスレッドコンテキストを保存すると、メインスレッドのコンテキストを取得し、その2つの間でマージを実行する通知がトリガーされます。
エンティティdocument
だけをインポートすると、すべてが正常に機能します。
現在のdocument
と、briefcase
という別のエンティティとの関係を確立しようとすると、私の問題が発生します。
これは私のインポートルーチンは、現在何をするかです:
- をSQLiteのデータベース行を通じて
Briefcase
エンティティ - ループを作成し、各列のため
Document
エンティティ - を作成し、ループ内で文書間の関係を作成し、ブリーフケースのエンティティ
- 500行ごとに、&のコンテキストをリセットします。これにより、メインスレッドを取得してメインスレッドのコンテキストとマージする通知が
ContextSave
にトリガされます。 - 私の問題はある場所です:上記保存&リセットした後、私の
Briefcase
エンティティは、メインスレッドにマージされます私のループが継続するときに、次の文書実体があるブリーフケース、と自分自身を関連付けるためにしようとし作成私は別のスレッド上のオブジェクト間の関係を確立することができないと言うクラッシュを取得します。
保存した後でコンテキストをリセットする呼び出しを削除すると、すべてが期待通りに機能しますが、メモリのフットプリントが上がってしまい、受け入れる準備ができていないことがわかりました。
だから私の質問は次のとおりです。
あなたは私が関係を作成し続けることができるように全体のインポート処理のためのブリーフケースの周りのエンティティ(および有効)を保つための方法を考えることはできますか?
私の最初の考えは、文脈のないブリーフケースのエンティティを作成してから、プロセス全体が終了した後でコンテキストに追加することでした。これはうまく動かなかった(創造時に墜落した)。
あなたのご意見は大変ありがとうございます。 自分の質問に答えるRogメール