在重新加载文档之前,如何检测OS X上iCloud中Core Data文档的更改?

时间:2014-02-18 20:39:04

标签: macos core-data icloud nsdocument

我目前正在开发一款基于OS X和iOS的应用程序并使用Core Data。为了在两个平台上使文档相同,我在OS X端使用BSManagedDocument

如果我同时在两个平台上启动应用程序并在每个平台上打开相同的文档,我可以在OS X端进行更改并在iOS端获得两个通知(一个是文档状态进入编辑禁用时,一个是当它被禁用时恢复正常)。我可以轻松地使用第二个作为触发器来更新UI,从而允许iOS端按预期工作。

问题是当我在iOS端进行更改时。发生这种情况时,文档窗口会重新打开(我已经验证了windowControllerDidLoadNib:正在调用)。在一个简单的应用程序中,这主要只是一个打嗝(虽然需要删除),而在更复杂的应用程序中,我看到这个结果只是部分重绘窗口内容。

我尝试注册NSPersistentStoreDidImportUbiquitousContentChangesNotification,但此通知从未在任何平台上发生。

在OS X上是否有任何方法可以通知iCloud发生了变化,以便可以对UI进行必要的更新,然后阻止重新打开窗口?

1 个答案:

答案 0 :(得分:0)

Mike从您的描述中不清楚您是使用iCloud同步事务日志还是将整个文档放在iCloud中并同步文档。如果您使用事务日志来同步文档,那么不清楚“编辑已禁用”通知是什么 - 这不是对事务日志同步有用的东西。对于后者,您必须使用NSPersistentStoreUbiquityNameKey选项集打开商店,这将导致Core Data在iCloud中创建事务日志并从其他设备导入日志。然后,您应该获得导入通知。

快速检查iCloud容器应确认您使用的是哪种方法。如果您使用的是事务日志,则iCloud容器应如下所示: enter image description here

您可能需要查看下面的链接,其中我已经发布了有关如何创建基于文档的应用程序的更详细说明。 http://ossh.com.au/design-and-technology/software-development/

不幸的是,示例应用程序不是基于UIManagedDocument或NSPersistentDocument,但是如果你看看它们处理备份文件的方式,你可以使用这种方法创建一个基于文档的应用程序,而不是使用UIManagedDocument。

此外,您将使用他们用于获取同步更新通知的相同方法,然后更新UI。两者都广泛使用您似乎无法合并更改并将消息发送到UI视图以进行更新的NSPersistentStoreDidImportUbiquitousContentChangesNotification导入通知。