2017-03-28 11 views
2

私の状況は次のとおりです。複数のコンテキストを管理するコアデータデータベースを持つマルチスレッドアプリケーションがあります。私の文脈では、HieratchyにはRoot Saving Contextと、データを取得して変更を保存する子コンテキストがあります。 コアデータ:親コンテキストの変更が子コンテキストにマージされない

  • コンテキストCの>子コンテキスト - -

    • コンテキストA - B>ルート親コンテキスト
    • コンテキスト>

    コンテキストBの子コンテキストは、データをフェッチとなるように使用されView Controllerのビューに表示されます。

    コンテキストCは、バックグラウンドスレッドの変更を保存するために使用されます。

    問題は、コンテキストCおよびコンテキストAを保存すると、変更がコンテキストBに伝播またはマージされないことです。変更はコンテキストAおよびCでは正しく維持されますが、Bでは正しく維持されません。 。

    私は、親コンテキストAの変更が子コンテキストBに反映されるというデフォルトの動作を考えましたが、それは起こっていません。これを達成する正しい方法は何でしょうか?

  • 答えて

    2

    iOS 10プロジェクトで作業している場合は、のコンテキストtrueautomaticallyMergesChangesFromParentプロパティを設定してみてください。変更内容を自分でマージする必要があり、古いプロジェクトでは

    • NSManagedObjectContextDidSave通知を守ってください。サブスクライブ時にContext Cをオブジェクトとして使用してください。それ以外の場合は、保存されているコンテキストからの通知は、コンテキストCからだけでなく、受信されます。
    • NSManagedObjectContext.mergeChanges(fromContextDidSave:)を使用してコンテキストBを更新してください。 Objective-Cセレクタは-mergeChangesFromContextDidSaveNotification:
    +0

    です。 'automaticallyMergesChangesFromParent'についてはちょうど見つかっており、デフォルトは' NO'です。私の問題を解決:)。ちなみに、10より前のiOSのソリューションは役に立ちました! – 6rod9

    関連する問題