ios - 撕裂 coredata 堆栈可以解决模型更新问题吗?

标签 ios swift core-data

假设最新的应用程序发布版本是版本号 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/

相关文章:

iphone - IOS - UITextField [键入时在 sqlite 数据库中搜索]

ios - 动画时透明的 UITableViewCell 闪烁背景

swift - Firebase:保存和检索 float (Swift)

iphone - 'validateForInsert' 核心数据失败

ios - 处理 Core Data 保存错误(Cocoa 错误 1570.)的方法

ios - 当键盘存在时,使用 UITextView 向上移动 UIAlertController 样式警报

ios - iPad 的选项卡式 Split View(切换详细 View )

ios - 添加照片,并重新加载嵌入式照片容器 View Controller

ios - 弹出式 UIViewController

ios - 删除行: error 'Invalid update: invalid number of rows in section 0'