UIManagedDocument是否为我处理行级别的conflcts还是我需要处理它们,他的答案是它确实处理行级别冲突。也许我误解了他,但我没有看到这一点。
所以我想问一些关键问题,希望能在这里得到一些澄清,这也是UIManagedDocument
如果我有一个表具有名字和姓氏的作者字段会发生以下情况: A)我和作者有一排:' Jon Do' - 它已同步到两个设备。然后我在“Jon' Jon”的一个设备上编辑名字。约翰'并在' 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,虽然缺乏documentaiton然后设法运送了产品,但我现在想要iCloud真正工作,而不是简单地做一个胜利者采取所有方法进行文档同步。
答案 0 :(得分:4)
我明白了。 UIManagedDocument
确实处理行级别冲突。
我从未见过任何名称的原因:NSPersistentStoreDidImportUbiquitousContentChangesNotificationobject
通知是因为我没有正确设置moc的持久存储选项。要让核心数据开始同步,您必须至少设置以下选项:NSPersistentStoreUbiquitousContentNameKey
& NSPersistentStoreUbiquitousContentURLKey
。
2年前,当我第一次开始使用iCloud时,我总是认为对setUbiquitous:itemAtURL:destinationURL:error:
的调用是为我做的,并且是等效的,但事实并非如此。 setUbiquitous:itemAtURL:destinationURL:error:
只是告诉iCloud同步该网址的文件,它对核心数据没有任何作用 - think dropbox 。要使UIManagedDocument的核心数据部分同步,需要设置这两个选项。
我已经启动了一个github仓库,它澄清了其中的一些内容,使得UIManagedDocument
的启动和运行变得更加容易。 http://github.com/dtrotzjr/APManagedDocument
希望这有助于其他人。我觉得很快就没有意识到这一点,但是当我2年前第一次为iOS 5实现iCloud同步时,文档很少,而且iCloud工作得不好,所以我认为我的行为是正常的。