Каковы критерии совместимости между метаданными магазина и моделью управляемого объекта?

Мое приложение использует CoreData Framework и я хочу проверить совместимость между метаданными магазина и моделью управляемого объекта. Я делаю это стандартным способом:

BOOL isModelCompatible = [model isConfiguration:nil
                    compatibleWithStoreMetadata:metadata];

и он возвращается NO, Однако сущности в метаданных такие же, как в модели. Одинаковое количество объектов и каждый объект имеет одинаковое имя. Однако модель действительно изменилась с тех пор, как магазин был создан с использованием этой модели, я удалил пару атрибутов в одной сущности. И мне интересно, достаточно ли этого для того, чтобы модель стала несовместимой с метаданными магазина. Я взглянул на официальную документацию и там написано:

This method compares the version information in the store metadata with the entity versions of a given configuration

И проблема (как это часто бывает, когда я читаю документы Apple) состоит в том, что я не совсем уверен, что именно означает эта фраза. Так может кто-нибудь объяснить больше по этой теме? Как CoreData решает, совместима ли модель с метаданными, если данные в метаданных такие же, как в модели?

1 ответ

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

Если вы хотите получить точные сведения, посмотрите на свойство versionHash NSEntityDescription и связанные классы. Это точно скажет вам, что используется, и все, что не упомянуто, не влияет на совместимость. Например на NSEntityDescription это включает

Значения, которые влияют на постоянство: имя сущности, хеш версии супернатура (если есть), если сущность абстрактная, и все хеш версии для свойств.

Чтобы продолжить оттуда, посмотрите ту же недвижимость на NSPropertyDescription и его подклассы.

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

Другие вопросы по тегам