Решит ли разрыв стека coredata проблему обновления модели? - PullRequest
0 голосов
/ 06 ноября 2019

предположим, что последняя версия приложения - версия № 20. и до сих пор существует 10 миграций coredata до версии № 20. и, например: пользователь, использующий версию 3., непосредственно выполняет автоматическое обновление до версии № 20.

Я хочу удалить стек coredata и перестроить его. но решает ли это проблему обновления модели? означает, что версия 3 использует обновление модели данных v3 (xcdatamodel), а версия 20 использует обновление модели данных v20 (xcdatamodel). если я удаляю и перестраиваю coredata с приведенным ниже кодом, когда пользователь автоматически обновляет приложение с версии 3 до 20. Затем он также укажет на новую версию 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 голосов
/ 07 ноября 2019

Да. Я реализовал эту стратегию, как только решил перестроить базу данных, когда она была несовместима со старыми версиями. Боковой узел: теперь я просто использую CoreData для управления миграцией.

Чтобы проверить, работает ли он, создайте объект с необязательным полем и вставьте строку для этого объекта без значения для этого поля. Теперь в вашей новой модели данных сделайте то же самое поле обязательным. Теперь вы увидите сбой приложения, если вы не уничтожите постоянное хранилище и не восстановите его, как показано в коде. Однако, если вы восстановите его, он будет работать.

Обратите внимание, что пользователь потерял все свои данные, но я предполагаю, что вы уже знаете это. У меня был код, который запрашивал у базы данных существующие данные, и он копировал локальный кэш с сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...