我有一个使用Core Data的iOS应用程序(后端有SQLite)。它只有一个实体,“项目”。应用程序捆绑了一个SQLite文件,预先添加了数百个项目,因此当用户从App Store下载应用程序时,它已经拥有了数据。
唯一的实体具有BOOL favorite
属性,用户可以更改该属性,当然 - 用于检查项目是否属于用户最喜欢的项目。
我打算在应用套装中发布预先构建的更多项目的应用更新(新的SQLite文件),但我想保持用户收藏< / strong>即可。同样,在这个版本中,我的Core Data模型将遭受一些修改(我需要在'Item'实体中使用一些新属性)。新的项目集是旧项目的超集(应用程序的旧版本中的项目 将始终在新版本中)。
我一直在努力解决这个问题,但我无法找到解决方案。我能够升级数据模型,将新属性引入我的实体,同时保持用户收藏(执行所谓的轻量级迁移,但后来我无法合并新旧项目。另一方面,我可以获得新的预先添加的项目,但随后将丢弃与喜爱相关的数据。
任何提示?提前谢谢大家
答案 0 :(得分:2)
我终于设法解决了这个问题。
我的app委托中有两个NSPersistentStoreCoordinators,两个NSManagedObjectContexts和两个NSManagedObjectModel:一个用于应用程序(更新的一个)和另一个指向旧存储的集合。在我的app delegate didFinishLaunchingWithOptions:
方法中,我从旧商店加载所有用户的收藏夹并将其保存到新商店中。这是我触摸旧商店的应用程序中的唯一一点。
无论如何,谢谢大家!
答案 1 :(得分:0)
我建议在那里用你的新东西创建第二个数据库,但没有收藏夹。然后从旧数据库中提取收藏夹并将其插入新数据库中。删除旧数据库并替换为新数据库。这似乎是最直接的解决方案。对于这些情况,Core Data可能内置了功能,但这很容易。