【问题标题】:How to upgrade iOS Core Data model and data如何升级 iOS Core Data 模型和数据
【发布时间】:2013-01-13 07:49:26
【问题描述】:

我有一个使用 Core Data(后端的 SQLite)的 iOS 应用程序。它只有一个实体,“项目”。该应用程序捆绑了一个 SQLite 文件,其中预先添加了数百个项目,因此当用户从 App Store 下载该应用程序时,它已经拥有数据。

唯一的实体有一个BOOL favorite 属性,用户可以更改它,当然可以用来检查一个项目是否在用户最喜欢的项目中。

我计划在应用程序包(一个新的 SQLite 文件)中发布具有更多预建项目的应用程序更新,但我想保留用户的收藏夹。同样,在这个版本中,我的核心数据模型将进行一些修改(我需要在“项目”实体中添加一些新属性)。新的项目集是旧项目的超集(旧版本应用程序中的项目始终在新版本中)。

我一直在努力解决这个问题,但我找不到解决方案。我能够升级数据模型,将新属性引入我的实体,同时保持用户的最爱(执行所谓的轻量级迁移,但是我无法合并新旧项目。另一方面,我能够获得新的预添加项目,但随后与收藏相关的数据被丢弃。

有什么提示吗?先谢谢大家了

【问题讨论】:

    标签: ios core-data migration


    【解决方案1】:

    我建议创建第二个数据库,其中包含您的新内容,但没有收藏夹。然后从旧数据库中提取收藏夹并将它们插入到新数据库中。删除旧数据库并替换为新数据库。这似乎是最直接的解决方案。对于这些情况,Core Data 中可能内置了一些功能,但这可能更容易。

    【讨论】:

    • 感谢@Scott 的快速回复。这就是我的想法,但我想知道如何以 Core Data 原生方式做到这一点。
    • 请发布一些关于您当前如何设置数据库的代码。
    • 我的应用完全按照developer.apple.com/library/ios/#documentation/DataManagement/… 中描述的步骤进行操作(需要登录)
    【解决方案2】:

    我终于设法解决了这个问题。

    我的应用委托中有两个 NSPersistentStoreCoordinators、两个 NSManagedObjectContext 和两个 NSManagedObjectModel:一组用于应用程序(更新后的),另一组指向旧商店。在我的应用程序委托didFinishLaunchingWithOptions: 方法中,我从旧商店加载所有用户的收藏夹并将它们保存到新商店中。这是我在应用程序中唯一接触旧商店的地方。

    还是谢谢大家!

    【讨论】:

      猜你喜欢
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 2012-09-30
      • 1970-01-01
      • 2011-12-21
      • 2011-01-19
      • 2020-05-05
      相关资源
      最近更新 更多