Я забыл создать новый xcdatamodel при удалении атрибута. Теперь он падает только для нескольких пользователей - PullRequest
0 голосов
/ 25 июня 2018

Я выпустил версию 21, в которой в сущности был добавлен новый атрибут. Затем снова в версии 22 я удалил этот новый атрибут из этого объекта. Я забыл создать новый xcdatamodel для этого изменения (тот, который был в версии 22). Я протестировал приложение, и оно работало нормально.

Проблема в том, что для некоторых пользователей происходит сбой при попытке кода получить доступ к контейнеру постоянства (я использую библиотеку INSPersistentContainer). Но это не приводит к локальному развитию.

lazy var persistentContainer: INSPersistentContainer = {
        let stack = INSDataStackContainer(name: "MyDb")
        stack.persistentStoreDescriptions.first?.shouldMigrateStoreAutomatically = true
        stack.persistentStoreDescriptions.first?.shouldInferMappingModelAutomatically = true
        stack.loadPersistentStores(completionHandler: { desc, error in
            if error != nil {
                print(error as Any)
                abort()
            }
        })
        return stack
    }()

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

Когда я использовал sqlite db browser для просмотра данных приложения на моем мобильном телефоне, атрибут, который был удален в версии 22, не существует. Так что iOS каким-то образом осуществила миграцию.

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

1 Ответ

0 голосов
/ 29 июня 2018

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

PS Если у вас есть небольшие изменения в схеме основных данных, iOS автоматически попытается выполнить миграцию, даже еслиВы не предоставляете новые xcdatamodel.

...