NSPersistentDocument和UIManagedDocument是否兼容?

时间:2013-09-25 13:53:20

标签: ios objective-c core-data uimanageddocument nspersistentdocument

我想在Mac OS X中创建一个NSPersistentDocument,并在iOS 7上将此文档作为UIManagedDocument阅读。

这可能吗?

两种文件格式是否兼容?

谢谢!

2 个答案:

答案 0 :(得分:1)

有趣的问题 - 我可以确认基本核心数据文件是兼容的。我有一个Mac应用程序和iOS应用程序使用相同的文件,使用iCloud同步。该应用程序是一个基于文档的应用程序,目前我一直在iCloud中存储实际的数据库文件,因此整个文件由iCloud同步。

这样可以正常工作,但很明显,如果用户在两台设备上打开文件并且不小心保存和关闭,则可能会覆盖它们的更改。

Apple已批准使用标准NSPersistentDocument创建和保存文件的Mac应用程序。不幸的是,他们拒绝了iOS应用程序的一些模糊的引用,不符合他们的数据存储指南,并说如果需要备份到iCloud,文档必须存储在/ Documents目录中。好吧,如果用户选择了iCloud,那么我将文件存储在API调用提供的iCloud位置。

无论如何,我还在等待他们回答这个方法的具体错误,因为它似乎与Pages和其他基于文档的应用程序使用的相同。

如果我尝试使用UIManagedDocument,那么iOS会创建一个文件夹结构并将数据库存储在此文件夹结构中。 Mac应用程序文件 - >打开对话框然后显示此文件夹结构以及基本上看起来像普通sqlite文件的文件。但是,OS X 10.8.4可能没有实现最新的iCloud / Core Data东西 - 谁知道......

EDIT 以下是使用Core Data和iCloud显示OSX和iOS应用程序集成的代码示例和视频的链接。 http://ossh.com.au/design-and-technology/software-development/uimanageddocument-icloud-integration/

答案 1 :(得分:1)

我同意这绝对是可能的。我在OS X 10.8 / 10.9 / 10.10上使用NSPersistent文档,使用二进制核心数据格式(没有包装器 - 普通文件)。在iOS上我正在使用UIDocument。核心数据在两种环境中都能正常工作。

Apple称NSPersistentDocument不支持iCloud。说它不是完全支持是更正确的。大多数NSDocument支持(包括来自10.8的iCloud文档库访问)都可以使用。处理打开的工作中的冲突文件。

您无法启用自动保存(在iCloud设计指南中列为iCloud Documents的要求)。自动保存以异步方式工作,NSPersistentDocument绝对不支持。

因此,如果您处理文件保存和冲突,则可以使用NSPersistent文档。有一些怪癖:因此,例如,如果iCloud更改到达OS X上打开的文档,则正常的NSDocument响应将自动重新打开文档。这不会发生 - 并且在您要保存文件之前没有警告文件已更改。但至少有一个警告。在iOS上,通过使用UIDocumentStateChangedNotification可以更轻松地检测到更改。