2 つの Mac アプリケーション間で iCloud を介してコア データを同期する作業を行っています。ほとんど動作しています ( http://timroadley.com/2012/04/03/core-data-in-icloud/に基づく) - データは同期されていますが、必要なコンテンツ変更通知を受け取っていません。変更をローカル コンテキストにマージします。
私の AppDelegate の managedObjectContext メソッドでは:
NSManagedObjectContext * moc = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSMainQueueConcurrencyType];
[moc performBlockAndWait:
^{
[moc setPersistentStoreCoordinator:coordinator];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeChangesFrom_iCloud:)
name:NSPersistentStoreDidImportUbiquitousContentChangesNotification
object:coordinator];
}];
私のオブザーバー関数は決して呼び出されません:
- (void) mergeChangesFrom_iCloud:(NSNotification*) notification
{
NSLog(@"Merging changes from iCloud");
// everything past here is irrelevent - this log message never appears
データ ストアは確実に同期されています。アプリ A でレコードを削除し、アプリ B でテーブルを強制的にリロードすると、マージされていない変更に対して予想されるコア データ エラーが発生します。アプリ B を終了して再起動すると、正しく更新されたデータが表示されます。
addObserver 呼び出しのブレークポイントは、それが呼び出されていることを示しています。のブレークポイントmergeChangesFrom_iCloud
は、そうでないことを示しています。
NSPersistentStoreDidImportUbiquitousContentChangesNotification
ドキュメント (およびチュートリアル) が主張するように、コーディネーターが送信しないように見えるのはなぜですか? どこからデバッグを開始できますか?
アップデート
謎が深まる。ここに示されている Core Foundation 関数を使用する - NSNotificationCenter は、すべての NSNotifications をトラップおよびトレースしますNSPersistentStoreDidImportUbiquitousContentChangesNotification
-飛び交う大量の通知の中にまったく表示されません。
まったく投稿されていないように見えます-また、起動時に初期ロードが行われた後、他の Core Data 関連の通知も表示されません。