将Core Data Store从一个应用程序导入到其他应用程序

时间:2010-09-17 14:55:28

标签: iphone core-data migration

这是我到目前为止在跨应用程序迁移数据时发现的最佳教程:

http://www.mobileorchard.com/lite-to-paid-iphone-application-data-migrations-with-custom-url-handlers/

但它只讨论了您可以完全控制数据表示方式的情况,例如,如果您构建自己的可存档plist对象并将其移入和移出文档目录,则会出现这种情况。如果您的应用使用核心数据并且您希望跨应用迁移商店,该怎么办?

在我的情况下,我希望有一个免费的应用程序的核心数据存储在启动时被付费应用程序选中。让我们假设我将使用如上所述的粘贴板过程,这样iOS就提供了一种很好的机制来保存NSData,启动应用程序和声明NSData。那么,如何在NSData中包装Core Data包?

为了使这一点更加可行,我们假设免费版本使用完整版本的相同模型或子集模型,以确保轻量级迁移功能正常。是否可以获取持久存储的内容,将它们提供给NSData对象,然后将NSData对象解压缩到新存储?我只是猜测这将是一个持久的存储......真正的问题是,这样的对象会是什么?

2 个答案:

答案 0 :(得分:0)

您可能希望使用NSFileHandle来读取和写入商店。这应该只是字节复制文件,以便它将文件从app复制到app而不改变其结构。如果您使用NSData编写,您将获得一个无用的XML plist文件。

但是,IIRC,您不能进行应用内升级,即将Lite版本转换为付费版本吗?有人应该检查我。

答案 1 :(得分:0)

NSPersistentStore *store = ...;    
NSData *data = [NSData dataWithContentsOfURL:[store URL]];

< pass it through the pasteboard >

[data writeContentsToURL:newURL atomically:NO];

newURL上的文件现在是持久存储。您可以通常的方式将其添加到持久性存储协调器。

与将商店迁移到文件系统中的其他位置的推荐方法相比,这有几个缺点。

  1. 您需要将整个商店拉入内存。
  2. 没有安全保护措施来确定是否保存了连接到商店的任何环境。