撕开coredata堆栈会解决模型更新问题吗?

时间:2019-11-06 19:54:02

标签: ios swift core-data

假设最新的应用程序发行版为版本20。到目前为止,有20次核心数据迁移,直到版本20。 例如:使用版本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)
      })

1 个答案:

答案 0 :(得分:0)

是的。当我决定重建与旧版本不兼容的数据库时,便实施了该策略。侧节点:现在,我仅依靠CoreData来处理迁移。

要测试其是否有效,请创建一个具有非强制性字段的实体,然后为该实体插入一行,但该字段没有值。现在,在新的数据模型中,使该完全相同的字段为必填字段。现在,您将看到,如果不破坏持久性存储并对其进行重建(如代码所示),则会导致应用程序崩溃。但是,如果您重建它,它将起作用。

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