![]() |
1
2
基本上我就是这样解决的。 尽管Amorya和MHarrison的答案是正确的,但他们有一个假设:一旦创建了表,不仅表,而且每个表中的每一行都将是相同的。 问题是,我使用现有数据(定期更新)预填充“动物”数据库的过程每次都会创建一个新的数据库文件。换句话说,我不能依赖于在核心数据中创建(静态)动物实体和(动态)评级实体之间的关系,因为在下次重新生成应用程序时,该实体可能不存在。为什么不呢?因为我无法控制核心数据如何在幕后存储这种关系。因为它是一个SQLite备份存储,所以很可能它使用的是一个具有外键关系的表。但是,当您重新生成数据库时,您不能假设每一行的键值是多少。如果我在列表中添加了一只狐猴,那么第二次Lion的主键可能会有所不同。
这个解决方案还有一个很好的副作用:我不需要处理任何迁移问题。应用程序附带的“静态”动物数据库可以作为应用程序资源嵌入。它可以改变它想要的一切。如果我修改它的数据模型以添加更多的实体,那么“动态”评级数据库在某个时候可能需要迁移,但实际上这两个数据模型是完全独立的。 |
![]() |
2
1
我这样做的方式是:将静态内容的数据库作为应用程序包的一部分。在应用程序启动时,检查文档中是否有数据库文件。如果没有,请将应用程序包中的一个复制到文档中。然后从文档中打开数据库:这是您从中读取和编辑的唯一数据库。 升级后,新的静态内容需要与用户的可编辑数据库合并。每个静态项(动物,在您的例子中)都有一个名为factoryID的字段,这是一个唯一的标识符。在更新后的第一次启动时,从app bundle加载数据库,并遍历每个动物。对于每个字段,在工作数据库中找到相应的记录,并根据需要更新任何字段。 可能有一个更快的解决方案,但由于升级过程不会经常发生,因此所花费的时间应该不会太多问题。 |
![]() |
3
1
将SQLite数据库存储在Documents目录(NSDocumentDirectory)中无疑是一个不错的选择。 一般来说,应该尽量避免应用程序更改修改或删除SQL表(添加是可以的)。然而,当您必须在更新中进行更改时,就像Amorya所说的那样,打开旧数据库,将您需要的任何内容导入新数据库,然后删除旧数据库。
|
![]() |
Danil · 种子/填充核心数据的最佳实践?[关闭] 6 月前 |
![]() |
Vincent · SwiftUI与表单中的CoreData绑定 1 年前 |
|
user13990880 · 需要在核心数据中保存打乱的顺序 1 年前 |