为什么我的 sqlite 数据库在对核心数据模型进行版本控制时没有迁移?
Why does my sqlite database not get migrated when versioning Core Data model?
每次我遇到我的核心数据模型的新版本时,SQLite 数据库都不会填充以前版本的数据。
例如:
- 我有一个用户table。
- 我单击编辑器 > 添加模型版本并将模型版本更改为 7
- 我为用户 table 添加了一个像 "name" 这样的字段。
- 在我的应用委托中,我使用 MagicalRecord 来管理我的数据库,并将代码更新为
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"myapp 7"];
- 我 运行 模拟器中的应用程序,现在我的用户 table 中的任何内容都完全消失了。
但是,如果我回到 "myapp 6",用户都还在那里。
有没有办法提高模型版本并保留来自 SQLite 的数据?
谢谢
核心数据迁移不会将数据迁移到新文件,它会就地更新持久存储文件。除了#4——你的步骤是正确的——因为在那一步你告诉核心数据使用一个不同于你一直使用的持久存储文件。这就是数据丢失的原因,因为您正在打开一个不同的新文件。您专门告诉 Core Data 不要将现有文件与以前的数据一起使用。如果要更新持久存储以使用新模型版本,则需要使用相同的文件名,以便可以找到并更新现有数据。
就其价值而言,持久存储文件名没有理由与模型名称相匹配。它们可以相同,但如果您在持久存储名称中包含版本号,那么事情就会变得混乱。更改持久存储名称通常不是模型迁移的一部分。
如果需要,您可以将数据移动到新文件,但这通常不是更新数据模型的一部分。
每次我遇到我的核心数据模型的新版本时,SQLite 数据库都不会填充以前版本的数据。
例如:
- 我有一个用户table。
- 我单击编辑器 > 添加模型版本并将模型版本更改为 7
- 我为用户 table 添加了一个像 "name" 这样的字段。
- 在我的应用委托中,我使用 MagicalRecord 来管理我的数据库,并将代码更新为
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"myapp 7"];
- 我 运行 模拟器中的应用程序,现在我的用户 table 中的任何内容都完全消失了。
但是,如果我回到 "myapp 6",用户都还在那里。
有没有办法提高模型版本并保留来自 SQLite 的数据?
谢谢
核心数据迁移不会将数据迁移到新文件,它会就地更新持久存储文件。除了#4——你的步骤是正确的——因为在那一步你告诉核心数据使用一个不同于你一直使用的持久存储文件。这就是数据丢失的原因,因为您正在打开一个不同的新文件。您专门告诉 Core Data 不要将现有文件与以前的数据一起使用。如果要更新持久存储以使用新模型版本,则需要使用相同的文件名,以便可以找到并更新现有数据。
就其价值而言,持久存储文件名没有理由与模型名称相匹配。它们可以相同,但如果您在持久存储名称中包含版本号,那么事情就会变得混乱。更改持久存储名称通常不是模型迁移的一部分。
如果需要,您可以将数据移动到新文件,但这通常不是更新数据模型的一部分。