3

私は2つのNSManagedObjectContextを持っています:メインコンテキストであるparentContextと、PrivateQueueConcurrencyTypeであるchildContextです。 childContextの使用バックグラウンドスレッドでサーバーにデータを同期していますが、同期が成功した後にdata.isSynced = trueと設定します。バックグラウンドスレッドでサーバにデータを同期する:コアデータ内のマルチコンテキスト

ユーザーは、同期中にデータを変更する可能性があります。これは、data.isSynced = falseを設定することによって、データをダーティとマークします。

parentContextがdata.isSynced == falseで、子コンテキストがdata.isSynced == trueの場合は、両方のスレッド(メインと同期)が同時に実行されていて、悪い状況が発生する可能性があります。 childContext.save()を呼び出すと、parentContextの変更がオーバーライドされ、変更が失われ、更新されたデータがサーバーに再び同期されなくなります。

現在のデザインを改善するにはどうすればよいですか? 親コンテキストと子コンテキストの間のマージをカスタマイズする方法はありますか?

答えて

1

単一のブールフラグを使用しないでください。代わりに2つの日付を使用してください。 1つの日付は最後の編集のためのものであり、もう1つは最後の同期のためのものです。それらはそれぞれ1つのスレッドからのみ更新されます。バックグラウンドスレッドは、データを同期させる必要があるかどうかを確認するために両方を読み込みますが、それでも問題ありません。

関連する問題