私はこのバグで頭を壁にぶつけています。基本的に、関係はあるコンテキストから別のコンテキストに正しくマージされていません。
モデルに Student と Teacher という 2 つのエンティティ タイプがあるとします。生徒は 1 人の教師しか持つことができず、教師は明らかに多くの生徒を持つことができます。これを xcdatamodel クラスで正しく設定しました。
サーバーからこれらのエンティティを同期しているため、2 つの管理対象オブジェクト コンテキストuiContext
がNSMainQueueConcurrencyType
ありbackgroundContext
ますNSPrivateQueueConcurrencyType
。
を使用してネストされた構造もセットアップしました[self.uiContext setParentContext:self.backgroundContext];
だからこれは私がやっていることです:
1) サーバーから教師を取得する
2)それらの管理対象オブジェクトを作成しますbackgroundContext
save
3 ) 呼びかけるbackgroundContext
4) をリッスンしNSManagedObjectContextDidSaveNotification
、次のコードを実行します。
[self.uiContext performBlock:^(void) { [self.uiContext mergeChangesFromContextDidSaveNotification:notif]; }];
これまでのところ、これはうまく機能します。私の uiContext は教師が管理するオブジェクトを取得し、それに応じて UI が更新されます。
ただし、次のことを行うと故障します。
5) サーバーから学生データを取得する
6) で管理対象オブジェクトを作成し、生徒から適切な教師への関係backgroundContext
を設定します。
7) 電話save
をかけるbackgroundContext
NSManagedObjectContextDidSaveNotification
8)通知を聞いているので、この保存はuiContext
ただし、ここで問題が発生し始めます。学生オブジェクトが正しくマージされても、uiContext
教師から学生への関係は設定されていません。生徒から教師への関係は正しく設定されていますが、その逆ではありません。具体的にです[someTeacherObject.students count] == 0
が、someStudentObject.teacher != nil
と永続ストアの両方で関係が正しく設定されていbackgroundContext
ます (検証済み)。ではありませんuiContext
。
何が起こっているのでしょうか?これをより適切にデバッグする方法はありますか?