私のアプリではiCloudをしばらく使用していますが、最近デバイスがお互いの話を拒否する問題が発生しています。少なくとも、マージが行われるメソッドをログに記録するまでは、私が思ったことです。私のpersistentStoreCoordinator
は、previous question of mineに記載されているように設定されています。iCloudがubiquityコンテナを使ってデータを送信しない
問題は次のとおりです。私managedObjectContext
を設定するとき、私は次のようにNSPersistentStoreDidImportUbiquitousContentChangesNotification通知を表示することにオブザーバを追加します。
coordinator
が
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]
として設定されて
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChangesFrom_iCloud:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator];
。次のように
私のiCloud方法は次のとおりです。
- (void)mergeiCloudChanges:(NSNotification *)note forContext:(NSManagedObjectContext *)moc {
NSLog(@"insert %@", [[note userInfo] valueForKey:@"inserted"]);
NSLog(@"delete %@", [[note userInfo] valueForKey:@"deleted"]);
NSLog(@"update %@", [[note userInfo] valueForKey:@"updated"]);
[moc mergeChangesFromContextDidSaveNotification:note];
NSNotification *refreshNotification = [NSNotification notificationWithName:@"RefreshAllViews" object:self userInfo:[note userInfo]];
[[NSNotificationCenter defaultCenter] postNotification:refreshNotification];
}
- (void)mergeChangesFrom_iCloud:(NSNotification *)notification {
NSLog(@"merging changes");
NSManagedObjectContext *moc = [self managedObjectContext];
[moc performBlock:^{
[self mergeiCloudChanges:notification forContext:moc];
}];
}
は、だから今、私たちは最初に実際の問題
を持って、同期は完璧に行ってきました。あるデバイスからのデータが変更された場合、その変更が他のデバイスに表示されました。しかし、今は何もない。好奇心が強いのはmergeiCloudChanges:forContext:
のログにあります。マージは実際に発生します。私はこれが引き起こされるのを見る。しかし、insert
、delete
、およびupdate
のマージノートの内容は、常に内容なしです。したがって、マージは行われますが、データはありません。私の人生にとって、なぜこれが正しいのか、それをもう一度正しく同期させる方法を理解できません。どんな助力も高く評価されます。
注:私はまたのためにNSUbiquitousKeyValueStoreDidChangeExternallyNotification
通知を使用しています私の(私はNSUserDefault
Key-Valueを同期するために使用)、およびそれらの通知は、さらに理由として私を混乱され、まったくしゃっくりせずに何度更新転送NSUbiquitousKeyValueStore
persistentStoreCoordinator
通知は空白です。
2週間後に私が自分で見つけて修正することができると思うので、誰かがこれを見た/経験したことを本当に願っています。
ログにiCloudエラーが表示されますか?あなたはすべてのアプリのiCloudデータを暗号化しようとしましたか、デバイスからアプリを削除してきれいにインストールしましたか? –
@KostiantynSokolinskyiログには何も間違いはありませんでした。今は「アイテムをダウンロードできませんでした」というエラーがありますが、iCloudがダウンロード自体を再試行するとすぐに解決されます。新しくインストールし、iCloudディレクトリを削除しました(トランザクションログが保存されているcloudURLを削除するために 'NSFileManager'を使用しています)。運がない。この時点で、あるデバイスを他のデバイスと通信することはできますが、他のデバイスと通信することはできません。私の人生にとって、何がうまくいかないのか分かりません。 – justin
スレッド間の変更を転送するmergeChangesFromContextDidSaveNotificationはありません(少なくとも古いアプローチでは)?しかし、NSPersistentStoreDidImportUbiquitousContentChangesNotificationはiCloudからの変更について通知します。 mergeChangesFromContextDidSaveNotificationは本当に必要ですか?私のテストでは、この通知後にiCloudからの変更が既にインポートされています。 – Stephan