Можете ли вы изменить модель Core Data во время выполнения? Да ... но, возможно, он не будет работать так, как вы хотите, чтобы он работал.
API-интерфейс Core Data позволяет создавать или изменять каждую деталь модели данных во время выполнения. Редактор модели Xcode - это удобство, но вы можете пропустить его и сделать все в коде, если хотите. Например, атрибут NSEntityDescription
properties
(который охватывает оба атрибута и отношения) можно записать. Вы можете создать новый NSAttributeDescription
и обновить свойства объекта, чтобы его содержать. Bang, вы просто добавили новый атрибут для объекта. Аналогично, 's entities
свойство можно записать, поэтому вы можете создать новый NSEntityDescription
и добавить его в модель. Это дает вам новый объект, созданный во время выполнения.
Но, и это большой один: вы можете сделать это только , прежде чем вы загрузите магазин данных. Как только вы загрузите постоянное хранилище, изменение модели приведет к исключению. Когда Core Data загружает постоянное хранилище, он сравнивает файл модели с моделью, используемой в файле хранилища. Они должны соответствовать, и вы не можете ничего сделать, чтобы изменить этот факт после загрузки магазина. Когда вы загружаете магазин, модель исправлена.
Более того, даже если вы модифицируете свою модель перед загрузкой постоянного хранилища, вы можете загружать только постоянные хранилища, соответствующие текущей версии модели, - если, кроме того, вы также не пишете код для переноса постоянного хранилища на новой модели. Как сильно это зависит от характера изменений. Как минимум, вам нужно будет внести какие-либо изменения перед загрузкой ранее сохраненных данных, а затем также организовать миграцию модели для обновления постоянного хранилища для использования новой модели.
С основными данными модель (схема) и данные хранятся отдельно и сопоставляются при загрузке магазина. Это не то, как SQLite работает внутри, но это подход, который обеспечивает Core Data.
Вы хотите изменить модель данных, которую использует Core Data, или что-то еще? Вы говорите «база данных», которая звучит так, будто вы имеете в виду что-то вне Core Data, но это не ясно. –
К сожалению, я хочу изменить базовую модель данных – user2181824