Настроить базовую модель данных во время выполнения? - PullRequest
4 голосов
/ 17 июня 2011

Я хочу модель, которая может быть настроена пользователем.Это возможно с основными данными или есть лучшие решения?

Спасибо matchi

Ps: это приложение для Mac OS!

Ответы [ 2 ]

8 голосов
/ 17 июня 2011

Это объясняется в разделе «Создание модели управляемых объектов» из учебника Apple по Core Data Utility .Как правило, если у вас есть ссылка на модель управляемого объекта, вы можете использовать классы NSEntityDescription и NSAttributeDescription для настройки объектов и их атрибутов в модели управляемого объекта.

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

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

Базовые данные должны иметь возможность самостоятельно находить модели управляемого объекта источника и назначения во время выполнения.(Базовые данные выполняют поиск в пакетах, возвращаемых методами NSBundle * allBundles и allFrameworks.) Затем они должны проанализировать изменения схемы для постоянных сущностей и свойств и сгенерировать выведенную модель сопоставления.Чтобы базовые данные могли это сделать, изменения должны соответствовать очевидному шаблону миграции, например:

  • Простое добавление нового атрибута
  • Необязательный атрибут становится необязательным
  • Необязательный атрибут становится необязательным и задает значение по умолчанию

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

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

1 голос
/ 17 июня 2011

См. Справочную страницу NSManagedObjectModel ...

Модели управляемых объектов доступны для редактирования до тех пор, пока они не используются менеджером графов объектов ... Однако, если модель уже используетсяиспользуется, это не должно быть изменено ...

Я бы сказал, что это определенно продвинутая тема Core Data (а сама Core Data уже довольно продвинутая тема), которую не следует предпринимать легкомысленно.Я не уверен, что любые данные, уже хранящиеся в хранилище данных, будут полезны (или даже полезны), если вы позволите пользователю изменить модель.

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