我已经在我的应用程序中使用了iCloud一段时间了,最近我遇到的问题是设备拒绝互相通话。或者至少这是我的想法,直到我开始记录合并发生的方法。我的persistentStoreCoordinator
设置如previous question of mine。
问题如下。在设置我的managedObjectContext
时,我向它添加一个观察者来查看NSPersistentStoreDidImportUbiquitousContentChangesNotification通知,如下所示:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChangesFrom_iCloud:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator];
其中coordinator
设置为NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]
。
我的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
通知NSUbiquitousKeyValueStore
(我用它来同步NSUserDefault
键值),这些通知转移并更新,没有任何打嗝总之,这让我更加困惑persistentStoreCoordinator
通知为空的原因。
我真的希望有人见过/经历过这种情况,因为经过两个星期的努力,我能想到找到并自行解决这个问题,我觉得我现在处于停滞状态。
答案 0 :(得分:0)
我已经弄明白了。基本上,事务日志似乎已损坏或放错位置。我重新设计了一种重新设置设备的方法,并将立即发布结果on a previous question of mine