2

UIManagedDocument 是否为我处理行级冲突,还是我需要处理这些,他的回答是它确实处理了行级冲突。也许我误解了他,但我没有看到这一点。

所以我要问几个关键问题,希望在这里得到一些澄清,这也是 UIManagedDocument

如果我有一个表作者有名字和姓氏字段会发生什么情况:A)我有一行作者:'Jon Do' - 它已同步到两个设备。然后我将一个设备上的名字从“Jon”编辑为“John”,并将另一台设备上的姓氏从“Do”编辑为“Doe”。iCloud 和 UIManagedDocument 将如何处理这个问题?我是否会收到某种通知,我需要回应以处理冲突?我尝试了以下代码,但从未收到通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_ondocumentStateChangedNotification:) name:UIDocumentStateChangedNotification object:self.openedDoc];

B)如果我向这两个设备添加不同的作者,以便现在有两行要合并,UIManagedDocument 会为我处理,还是我需要自己做一些事情?如果我需要自己做某事,我需要做什么?我尝试注册 NSPersistentStoreDidImportUbiquitousContentChangesNotification ,但这对我来说似乎也没有成功。我要注册哪个上下文?我试过这个:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_onPersistentStoreDidImportUbiquitousContentChanges:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotificationobject:self.openedCaddy.managedObjectContext.parentContext];

我还需要自己为 UIManagedDocument 处理 NSManagedObjectContextDidSaveNotification 还是 UIManagedDocument 为我处理?

非常感谢任何和所有的帮助我在这里真的很挣扎。我在 iOS 5 发布时采用了 iCloud 和 UIManagedDocument,尽管当时缺乏文档,但我还是设法发布了一个产品,但现在我希望 iCloud 能够真正发挥作用,而不仅仅是做一个赢家通吃的文档同步方法。

4

1 回答 1

4

我想到了。UIManagedDocument确实处理行级冲突。

我从未看到任何名称的原因:NSPersistentStoreDidImportUbiquitousContentChangesNotificationobject通知是因为我没有正确设置 moc 的持久存储选项。要让核心数据开始同步,您必须至少设置以下选项:NSPersistentStoreUbiquitousContentNameKey& NSPersistentStoreUbiquitousContentURLKey

当我 2 年前第一次开始使用 iCloud 时,我一直认为调用 tosetUbiquitous:itemAtURL:destinationURL:error:为我做了这件事并且是等价的,但事实并非如此。setUbiquitous:itemAtURL:destinationURL:error:只是告诉 iCloud 同步该 URL 上的文件,它对核心数据没有任何作用——想想 dropbox。要让 UIManagedDocument 的核心数据部分同步这两个选项,需要设置。

我已经启动了一个 github 存储库,它澄清了其中的一些内容,并使启动和运行UIManagedDocument变得更加容易。http://github.com/dtrotzjr/APManagedDocument

希望这对其他人有帮助。没有早点意识到这一点,我感到相当愚蠢,但是当我 2 年前第一次为 iOS 5 实现 iCloud 同步时,文档很少,而且 iCloud 也不能很好地工作,所以我认为我的行为是正常的。

于 2013-09-05T22:42:35.610 回答