iCloud核心数据未同步第二台设备上的所有记录

时间:2013-09-05 00:27:11

标签: core-data sync icloud

当我在iCloud中创建一个sqlite核心数据存储并在一台设备上播种时,它工作正常并且有大约6,000条记录。当我在第二台设备上创建商店时,它会同步,但最终只有大约4,000条记录(大概来自事务日志)。我的同步代码响应NSPersistentStoreDidImportUbiquitousContentChangesNotification读取......

    NSUndoManager * undoManager = [context undoManager];
    [undoManager disableUndoRegistration];
    [context mergeChangesFromContextDidSaveNotification:info];
    [context processPendingChanges];
    [undoManager enableUndoRegistration];

但是,当我插入调试语句时......

NSSet *updatedObjects = [[info userInfo] objectForKey:NSUpdatedObjectsKey];
NSSet *deletedObjects = [[info userInfo] objectForKey:NSDeletedObjectsKey];
NSSet *insertedObjects = [[info userInfo] objectForKey:NSInsertedObjectsKey];

NSLog(@"found transaction log.  updated %d, deleted %d, inserted %d", updatedObjects.count, deletedObjects.count, insertedObjects.count);

我得到一个意想不到的'0'一切,但我知道它正在同步,因为数据库中有大约4,000条记录。

有没有人对这里可能发生的事情有什么建议?

由于 射线

1 个答案:

答案 0 :(得分:0)

如果您查看sqlite商店本身,您会看到iOS正在添加列和表以保持其引用。除非您计算并存储在@property中,否则无法通过代码添加主键。但话说回来,核心数据并不关心它。预先计算的ID仅在您的应用程序逻辑中为您提供服务。

对于iCloud部分,您说得对:iCloud通过事务日志传输数据。事务日志将复制到每个设备,并从那里填充sqlite store。

文档说事务日志保留了合理的时间,然后被删除。这可能是仅有4000条记录而不是6000条记录的原因。

此外,它不是你的情况,但除此之外,根据我的经验,最好从一开始就介绍iCloud,当时所有设备都是空的。如果你在设备部分填充自己的数据时引入iCloud,你可能会遇到奇怪的问题。

如果你还没有这样做,我还建议在Xcode方案中打开iCloud调试。

我个人认为,要同步更多的数据库,这是一项相当困难的任务,我仍然想知道如何通过仅处理事务日志共享来正确完成它。事实上,至少在iOS 5核心数据和iCloud完全不可靠和危险的情况下。