Каковы критерии совместимости между метаданными магазина и моделью управляемого объекта?
Мое приложение использует 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 устраняет несовместимость, обновляя постоянное хранилище в соответствии с новой моделью данных. Часто это можно сделать автоматически, как при облегченной миграции. Удаление атрибутов позволило бы облегчить миграцию.