【问题标题】:Import Core Data store from one app to other app将核心数据存储从一个应用程序导入到另一个应用程序
【发布时间】:2010-09-17 14:55:28
【问题描述】:

这是迄今为止我发现的关于跨应用迁移数据的最佳教程:

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

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

就我而言,我希望付费应用在启动时获取免费应用的核心数据存储。假设我将使用上面描述的粘贴板过程,这样 iOS 提供了一个很好的机制来保存 NSData、启动应用程序和声明 NSData。那么,如何在 NSData 中封装 Core Data 包?

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

【问题讨论】:

    标签: iphone core-data migration


    【解决方案1】:
    NSPersistentStore *store = ...;    
    NSData *data = [NSData dataWithContentsOfURL:[store URL]];
    
    < pass it through the pasteboard >
    
    [data writeContentsToURL:newURL atomically:NO];
    

    newURL 处的文件现在是一个持久存储。您可以按常规方式将其添加到持久存储协调器。

    与将存储迁移到文件系统中的不同位置的推荐方法相比,这有几个缺点。

    1. 您需要将整个存储拉入内存。
    2. 对于连接到存储的任何上下文是否被保存,没有任何安全措施。

    【讨论】:

      【解决方案2】:

      您可能希望使用 NSFileHandle 来读取和写入存储。那应该只是字节复制文件,以便将文件从应用程序复制到应用程序而不改变其结构。如果你用 NSData 编写,你会得到一个无用的 XML plist 文件。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        相关资源
        最近更新 更多