バックグラウンドのコンテキストでしばらくコアデータを使用していて、バックグラウンドからメインコンテキストにマージするために誰もがなぜNSManagedObjectContextDidSaveNotification
を使用するように助言するのだろうと思っていました。私は、1つのNSPersistentStoreCoordinator
、主なコンテキストと背景のコンテキストを持つテストプロジェクトを作成しました。NSManagedObjectContextDidSaveNotificationは役に立ちませんか?
- (NSManagedObjectContext *)managedObjectContext {
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
- (NSManagedObjectContext *)backgroundContext {
if (_backgroundContext != nil) {
return _backgroundContext;
}
_backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
_backgroundContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
return _backgroundContext;
}
は今まで、私はこのような保存通知を聞いているだろう:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:self.backgroundContext];
しかし、私が実現私はそれからマージあれば、それは問題ではありません、ここでinitalisationのコード断片でありますお知らせ。私はどちらかのコンテキストを編集して保存することができ、もう1つは数秒後にマージされます。
So.私の質問、なぜ私はNSManagedObjectContextDidSaveNotification
が必要でしょうか?
[コアデータの並行性](http://code.tutsplus.com/tutorials/core-data-from-scratch-concurrency--cms-22131) –
通知を処理せずにマージしますが、それは本当に運がいいだけです。通知が行うことは、マージする他のコンテキストが変更を知ることができるようにすることです。これは、コンテクストが物をキャッシュするために重要です。 – Avi
私のすべてのテストでは、ist自体がマージされていました。しかし、私はその通知を使用してマージする必要がある場合、すべてのサンプルは、バックグラウンドからメインコンテキストにマージなぜですか?メインコンテキストを保存するときに、逆にマージする必要はありませんか? –