Базовые классы данных и модель
-
06-07-2019 - |
Вопрос
Недавно я начал программировать на Objective-C, а сейчас изучаю Core Data.Однако я не понимаю, что именно определяет саму модель в Core Data.
Вот что я имею в виду:Допустим, я создаю объект с некоторым набором атрибутов, используя построитель графических моделей.Затем у меня есть Xcode, который генерирует код для соответствующего класса.Далее я хочу создать в классе свойство, которое будет использоваться только во время выполнения и которое не нужно будет сохранять или извлекать с помощью Core Data.Итак, я добавляю в класс переменную и соответствующее ей свойство (синтезируя ее в реализации)
Новое свойство не определено в построителе модели, но оно определено в классе, производном от NSManagedObject.Как это рассматривается в Core Data?Определяют ли свойства, перечисленные в классе, атрибуты в «модели» или модель определяют только атрибуты, определенные в построителе моделей?
Точно так же я хотел добавить в файл класса свойство на основе перечисления, которое при получении или установке получает доступ к атрибуту NSNumber в модели или изменяет его.Могу ли я сделать это, не рассматривая свойство Core Data как атрибут, который нужно сохранить и извлечь?
СПАСИБО!
Решение
Вы можете добавлять собственные свойства (и переменные) в код, сгенерированный для ваших NSManagedObjects, как и в любой другой класс.Они не станут частью модели, а будут временно храниться в памяти.Стоит отметить, что если управляемый объект будет освобожден, то значение в памяти тоже будет освобождено.
Совет, который я бы посоветовал, если вы просто реализуете пользовательские средства доступа к базовым данным, — создать категорию для рассматриваемого управляемого объекта.В средствах доступа вы получаете доступ к базовому NSNumber и преобразуете его в свое перечисление, определенное в заголовке категории.
Если вам необходимо повторно сгенерировать код управляемого объекта, например, из-за изменения модели, вы можете просто удалить класс, созданный для управляемого объекта, и сгенерировать его заново без необходимости объединения с каким-либо добавленным вами пользовательским кодом.Добавленная вами категория будет работать по-прежнему, пока базовое свойство хранилища останется прежним.
Подробнее о категориях вы можете узнать в разделе Руководство по языку программирования Objective-C в АЦП.