撕毁核心数据堆栈会解决模型更新问题吗



假设最新的应用程序发布版本是20号。到目前为止,共有10次核心数据迁移,直到版本20。并且例如:正在使用版本3的用户。直接自动更新到20号版本。

我想删除coredata堆栈,然后重建它。但它能解决模型更新问题吗?意味着版本3使用v3数据模型更新(xcdatamodel(,版本20使用v20数据模型更新。如果在用户自动更新应用程序从版本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来处理迁移。

若要测试它是否有效,请创建一个具有非必填字段的实体,并为该实体插入一行,该行不包含该字段的值。现在,在您的新数据模型中,强制使用完全相同的字段。现在,如果你不销毁持久存储并重新构建它,你会看到应用程序崩溃,就像你在代码中显示的那样。然而,如果你重建它,它会起作用的。

请注意,用户已经丢失了所有数据,但我想您已经知道了。我有一些代码在数据库中查询现有数据,它从服务器中复制了本地缓存。

最新更新