Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在对核心数据模型进行版本控制时,为什么我的sqlite数据库没有迁移?_Ios_Sqlite_Core Data_Magicalrecord_Core Data Migration - Fatal编程技术网

Ios 在对核心数据模型进行版本控制时,为什么我的sqlite数据库没有迁移?

Ios 在对核心数据模型进行版本控制时,为什么我的sqlite数据库没有迁移?,ios,sqlite,core-data,magicalrecord,core-data-migration,Ios,Sqlite,Core Data,Magicalrecord,Core Data Migration,每次我跳转到核心数据模型的新版本时,SQLite数据库都不会被以前版本的数据填充 例如: 我有一张用户表 我单击编辑器>添加模型版本并将模型版本更改为7 我在users表中添加了一个类似“name”的字段 在我的应用程序委托中,我正在使用MagicalRecord管理我的数据库,并将代码更新为[MagicalRecord SetupCoreDataStackWithAutoMigratingSqliteStoreName:@“myapp 7”] 我在模拟器中运行应用程序,现在我的用户表中的所有内

每次我跳转到核心数据模型的新版本时,SQLite数据库都不会被以前版本的数据填充

例如:

  • 我有一张用户表
  • 我单击编辑器>添加模型版本并将模型版本更改为7
  • 我在users表中添加了一个类似“name”的字段
  • 在我的应用程序委托中,我正在使用MagicalRecord管理我的数据库,并将代码更新为
    [MagicalRecord SetupCoreDataStackWithAutoMigratingSqliteStoreName:@“myapp 7”]
  • 我在模拟器中运行应用程序,现在我的用户表中的所有内容都完全消失了
  • 然而,如果我回到“myapp 6”,用户仍然都在那里

    有没有办法升级模型版本并保留来自SQLite的数据


    感谢

    核心数据迁移不会将数据迁移到新文件,而是将永久存储文件更新到位。除了#4之外,您的步骤是正确的——因为在该步骤中,您告诉核心数据使用与您一直使用的持久存储文件不同的持久存储文件。这就是数据丢失的原因,因为您正在打开一个不同的新文件。您特别告诉Core Data不要将现有文件与以前的数据一起使用。如果要更新持久存储以使用新的模型版本,则需要使用相同的文件名,以便可以找到和更新现有数据

    值得一提的是,持久存储文件名没有理由与模型名匹配。它们可以是相同的,但是如果在持久存储名称中包含版本号,那么事情可能会变得混乱。更改持久存储名称通常不是模型迁移的一部分

    如果需要,可以将数据移动到新文件中,但这通常不是更新数据模型的一部分