我的应用程序包含非常大的Core Data数据库。我在过去的一年里已经多次版本化了。
我最后一次对数据库进行版本化后,我对一个实体进行了一次简单的更改:我添加了一个新的可选属性。由于某种原因,它不会使用轻量级迁移进行迁移。我后来发现这是因为Apple的轻量级迁移代码中的一个错误是由于我在另一个版本控制中需要重命名标识符而导致的。
无论如何,我离题了......
由于这个错误导致我无法使用轻量级迁移,我创建了一个映射文件来帮助迁移,而不是理解这将是一个更重的过程,并会迫使我的用户等待应用程序加载在进行迁移时将整个数据库放入内存。事实证明,对于非常大的数据库来说,这根本不是一个选项,而且由于内存问题等原因,我的许多用户根本无法迁移数据库。
所以现在我想重新发布我的应用并解决这个问题。麻烦的是,我的一些用户有一个数据库,以某种方式被标记为'正在迁移'。即使我的新代码摆脱了映射文件并支持轻量级迁移,处于此状态的用户“在迁移过程中”似乎也无法重置。
我有什么选择退出迁移? - 我可以检测到我处于这种状态,因为Documents目录中有一个'.myDB.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3'文件。删除此文件不会清除迁移。我的猜测是数据库以某种方式标记为处于此状态,或者已经部分迁移。 - 我可以检测到这种状态,然后完全删除数据库。但这迫使我的用户重新下载他们的数据。
有什么想法吗?
谢谢你的帮助。
答案 0 :(得分:0)
我唯一想到的就是破解受影响文件的SQL存储并查找可能表示数据库处于暂时状态的标志或其他内容。您可以直接写入文件并更改某些内容。
那真是个丑陋的问题。