我想在Mac OS X中创建一个NSPersistentDocument
,并将本文档作为iOS 7上的UIManagedDocument
阅读。
这可能吗?
两种文件格式兼容吗?
谢谢!
有趣的问题 - 我可以确认基本的核心数据文件是兼容的。 我有一个 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的东西 - 谁知道呢......
编辑以下是代码示例和视频的链接,显示了使用 Core Data 和 iCloud 集成的 OSX 和 iOS 应用。http://ossh.com.au/design-and-technology/software-development/uimanageddocument-icloud-integration/
我同意这绝对是可能的。我在OS X 10.8/10.9/10.10上使用二进制核心数据格式的NSPersistent 文档(没有包装器 - 纯文件(。在iOS上,我正在使用UIDocument。核心数据在两种环境中都能正常工作。
苹果表示NSPersistentDocument不支持iCloud。更正确的说法是不完全支持的。大多数 NSDocument 支持(包括从 10.8 开始的 iCloud 文档库访问(都可以使用。处理打开作品中的冲突文件。
您无法启用自动存储(这在《iCloud 设计指南》中列为 iCloud 文稿的要求(。自动保存是异步工作的,NSPersistentDocument绝对不支持自动保存。
因此,如果您处理文件保存和冲突,则可以使用 NSPersistent 文档。有一些怪癖:因此,例如,如果iCloud更改到达OS X上打开的文档,则正常的NSDocument响应是自动重新打开文档。这不会发生 - 并且在您将要保存文件之前没有警告文件已更改。但至少有一个警告。在 iOS 上,通过使用 UIDocumentStateChangedNotification 更容易检测更改。