2 つのコンテキスト間で変更をマージする際に問題があります。そのうちの 1 つは、WebServices がデータベースにデータを読み書きするため、バックグラウンド (追加のコンテキスト) で動作しています。メインコンテキストで変更を保存しようとしている間に、アプリケーションが動かなくなり、何も起こりませんでした。以下に示すように、私が作成するWebサービス(シングルトン)からのコンテキスト。メイン コンテキストを保存しようとすると、通知を送信して変更を WebServices コンテキストにマージしますが、正しく機能しません。どうしたの?バックグラウンドでデータを読み取り、メイン コンテキストがデータベースに何かを保存しようとしたときに発生しました。
managedObjectContext = [NSManagedObjectContext new];
NSPersistentStoreCoordinator *store = [ [theDelegate managedObjectContext] persistentStoreCoordinator];
[managedObjectContext setPersistentStoreCoordinator:store];
[managedObjectContext setStalenessInterval:0.0];
私が使用するメインコンテキストの保存前:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChanges:) name:NSManagedObjectContextDidSaveNotification object:self.managedObjectContext];
変更をマージする場所
[[[WebServie instance] managedObjectContext] mergeChangesFromContextDidSaveNotification:notification]
動作するはずですが、何が問題なのかわかりません.WebServicesはバックグラウンドで動作しており、DataBaseManagerはメインスレッドにあります
私のマージコンテキストのコードは間違っていますか?
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
[dnc addObserverForName:NSManagedObjectContextDidSaveNotification
object: self.managedObjectContext queue:nil
usingBlock:^(NSNotification *notification)
{
NSLog(@"merge");
[[[WebServiceManager instance] managedObjectContext] mergeChangesFromContextDidSaveNotification:notification];
}];
NSError *error;
NSLog(@"error");
if (![self.managedObjectContext save:&error])
{
NSLog(@"error :%@", error);// Update to handle any error appropriately.
}
NSLog(@"after error");
[dnc removeObserver:self
name:NSManagedObjectContextDidSaveNotification
object:self.managedObjectContext];