2011-07-14 16 views
0

これはややこしいことです。コアデータ関係、複数の管理オブジェクトコンテキストおよびスレッド

私はDocumentエンティティを持っています。現在、バックグラウンドスレッド上のSQLiteデータベースからCoreDataにインポートされています。バックグラウンドスレッドのための別のコンテキストがあり、私は500エントリごとに保存をバッチしています。

バックグラウンドスレッドコンテキストを保存すると、メインスレッドのコンテキストを取得し、その2つの間でマージを実行する通知がトリガーされます。

エンティティdocumentだけをインポートすると、すべてが正常に機能します。

現在のdocumentと、briefcaseという別のエンティティとの関係を確立しようとすると、私の問題が発生します。

これは私のインポートルーチンは、現在何をするかです:

  • をSQLiteのデータベース行を通じてBriefcaseエンティティ
  • ループを作成し、各列のためDocumentエンティティ
  • を作成し、ループ内で文書間の関係を作成し、ブリーフケースのエンティティ
  • 500行ごとに、&のコンテキストをリセットします。これにより、メインスレッドを取得してメインスレッドのコンテキストとマージする通知がContextSaveにトリガされます。
  • 私の問題はある場所です:上記保存&リセットした後、私のBriefcaseエンティティは、メインスレッドにマージされます私のループが継続するときに、次の文書実体があるブリーフケース、と自分自身を関連付けるためにしようとし作成私は別のスレッド上のオブジェクト間の関係を確立することができないと言うクラッシュを取得します。

保存した後でコンテキストをリセットする呼び出しを削除すると、すべてが期待通りに機能しますが、メモリのフットプリントが上がってしまい、受け入れる準備ができていないことがわかりました。

だから私の質問は次のとおりです。

  • あなたは私が関係を作成し続けることができるように全体のインポート処理のためのブリーフケースの周りのエンティティ(および有効)を保つための方法を考えることはできますか?

  • 私の最初の考えは、文脈のないブリーフケースのエンティティを作成してから、プロセス全体が終了した後でコンテキストに追加することでした。これはうまく動かなかった(創造時に墜落した)。

あなたのご意見は大変ありがとうございます。 自分の質問に答えるRogメール

答えて

1

  • はSQLiteのデータベース行を通じてブリーフケースエンティティ
  • ループを作成し、ループ内の文書やブリーフケースとの間の関係を作成し、各行
  • のための文書エンティティを作成エンティティ
  • 500行ごとにコンテキストを保存&は保存後にブリーフケースのオブジェクトIDをすぐに格納します
  • が今では、コンテキスト
  • をリセットするには、大丈夫です(再)オブジェクトIDを使用して、ブリーフケースのインスタンスを取得上記の保存とexistingObjectWithID:error:メソッド
  • ループ...
を継続
関連する問題