假设最新的应用程序发布版本是版本号 20。到目前为止,到版本号 20 为止已有 10 次核心数据迁移。 例如:使用版本3的用户,直接自动更新到版本20。
我想删除 coredata 堆栈并重建它。 但它能解决模型更新问题吗?表示版本 3 使用 v3 数据模型更新 (xcdatamodel),版本 20 使用 v20 数据模型更新 (xcdatamodel)。 如果当用户自动更新应用程序从版本 3 到 20 时,我使用以下代码删除并重建 coredata。 那么它也会指向新的 xcdatamodel 版本吗?
var allstores : Array = self.storeContainer.persistentStoreCoordinator.persistentStores
for store in allstores{
// remove store file from coordinator
do {
try storeContainer.persistentStoreCoordinator.destroyPersistentStore(at: store.url!, ofType: NSSQLiteStoreType, options: nil)
} catch let error {
print("\(error.localizedDescription)")
}
}
然后重建..
self.storeContainer.loadPersistentStores(completionHandler: { (nsPersistentStoreDescription, error) in
guard let error = error else {
return
}
fatalError(error.localizedDescription)
})
最佳答案
是的。一旦我决定重建数据库,因为它与旧版本不兼容,我就实现了这个策略。侧节点:现在我只依靠CoreData来处理迁移。
要测试它是否有效,请创建一个具有非必填字段的实体,并为该实体插入一行,但不包含该字段的值。现在,在您的新数据模型中,将完全相同的字段设置为必填字段。现在,如果您不销毁持久存储并重建它,您将看到应用程序崩溃,如代码中所示。但是,如果您重建它,它就会起作用。
请注意,用户已丢失所有数据,但我想您已经知道这一点。我有一些代码查询数据库中的现有数据,并从服务器复制本地缓存。
关于ios - 撕裂 coredata 堆栈可以解决模型更新问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58737573/