2012-02-19 9 views
1

私のアプリではiCloudをしばらく使用していますが、最近デバイスがお互いの話を拒否する問題が発生しています。少なくとも、マージが行われるメソッドをログに記録するまでは、私が思ったことです。私のpersistentStoreCoordinatorは、previous question of mineに記載されているように設定されています。iCloudがubiquityコンテナを使ってデータを送信しない

問題は次のとおりです。私managedObjectContextを設定するとき、私は次のようにNSPersistentStoreDidImportUbiquitousContentChangesNotification通知を表示することにオブザーバを追加します。

coordinatorNSPersistentStoreCoordinator *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:のログにあります。マージは実際に発生します。私はこれが引き起こされるのを見る。しかし、insertdelete、およびupdateのマージノートの内容は、常に内容なしです。したがって、マージは行われますが、データはありません。私の人生にとって、なぜこれが正しいのか、それをもう一度正しく同期させる方法を理解できません。どんな助力も高く評価されます。

注:私はまたのためにNSUbiquitousKeyValueStoreDidChangeExternallyNotification通知を使用しています私の(私はNSUserDefault Key-Valueを同期するために使用)、およびそれらの通知は、さらに理由として私を混乱され、まったくしゃっくりせずに何度更新転送NSUbiquitousKeyValueStorepersistentStoreCoordinator通知は空白です。

2週間後に私が自分で見つけて修正することができると思うので、誰かがこれを見た/経験したことを本当に願っています。

+0

ログにiCloudエラーが表示されますか?あなたはすべてのアプリのiCloudデータを暗号化しようとしましたか、デバイスからアプリを削除してきれいにインストールしましたか? –

+0

@KostiantynSokolinskyiログには何も間違いはありませんでした。今は「アイテムをダウンロードできませんでした」というエラーがありますが、iCloudがダウンロード自体を再試行するとすぐに解決されます。新しくインストールし、iCloudディレクトリを削除しました(トランザクションログが保存されているcloudURLを削除するために 'NSFileManager'を使用しています)。運がない。この時点で、あるデバイスを他のデバイスと通信することはできますが、他のデバイスと通信することはできません。私の人生にとって、何がうまくいかないのか分かりません。 – justin

+0

スレッド間の変更を転送するmergeChangesFromContextDidSaveNotificationはありません(少なくとも古いアプローチでは)?しかし、NSPersistentStoreDidImportUbiquitousContentChangesNotificationはiCloudからの変更について通知します。 mergeChangesFromContextDidSaveNotificationは本当に必要ですか?私のテストでは、この通知後にiCloudからの変更が既にインポートされています。 – Stephan

答えて

0

私はこれを考え出しました。基本的に、トランザクションログは破損しているか間違っているようです。デバイスを再サイクリングする方法を修正し、すぐに結果を投稿しますon a previous question of mine

関連する問題