0

テーブル ビューをサポートするNSFetchedResultsController(FRC) があります。定義上、定義しているフェッチ要求に関連するマネージド オブジェクト コンテキスト (MOC) の変更をリッスンしています。

このテーブル ビューが表示されている間、監視している FRC に関連する管理対象オブジェクトを使用して、実行する小さなインポート (数十のレコードなど) がある場合があります。

テーブル ビューをサポートするピア MOC でインポートを実行します。両方の MOC はNSMainQueueConcurrencyTypeで、共通の親 MOC はNSPrivateQueueConcurrencyTypeです。

保存してインポートが完了するとすぐに、以前にセットアップした通知がハンドラーを起動します。mergeChangesFromContextDidSaveNotification:

- (void)scratchpadContextDidSave:(NSNotification *)saveNotification {
    log4Info(@"Default Context now merging changes from Scratchpad Context save notification.");
    [self.defaultContext mergeChangesFromContextDidSaveNotification:saveNotification];
}

質問:mergeChangesFromContextDidSaveNotification:リッスンしている FRC が通知される前に を完了するに はどうすればよいですか?

動機入ってくる FRC の新しいデータは、私のアプリケーションである種のトリガーとして機能します。これは、マージされたすべての変更が利用可能である 限り問題ありません。私の FRC は、完全な情報を持っていないため、すぐに行動します。

このように FRC が辛抱する必要があるロジックを削除しますが、マージ操作全体が完了するまで、変更通知が送信されないように「ロック」する方法を認識していないことが懸念されました。

4

1 に答える 1

0

イドスター、

すべての への同期を強制する方法-save:は、最後の項目が実際にメイン MOC へのマージを実行するプライベート シリアル キューを介してマージをシリアル化することです。アイテムが永続ストアに保存されたからといって、すぐにマージする必要があるわけではありません。userInfo辞書をメインの MOC に送信する前に、自分で辞書をマージする必要があります。

アンドリュー

于 2012-06-07T13:08:38.207 に答える