2

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

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

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

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

有什么提示吗?谢谢大家

4

2 回答 2

2

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

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

总之谢谢大家!

于 2013-01-29T19:07:04.960 回答
0

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

于 2013-01-29T17:03:24.237 回答