Управляемые модели объекта Core Data в среде Cocoa, Mac OS, iOS

Cocoa

Большая часть функциональности Core Data зависит от схемы созданной с целью описания объектов приложения, их свойств и отношений между ними. Схема представляет собой управляемый объект модели экземпляра NSManagedObjectModel. В общем, чем богаче модели, тем лучше Core Data может поддерживать приложения. В данном разделе описываются особенности управляемой объектной модели, как ее создать, и как ее затем использовать в приложении.

Особенности управляемой объектной модели

Сущности

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

NSEntityDescription объект может иметь NSAttributeDescription и NSRelationshipDescription объекты, которые представляют свойства объекта в схеме. Сущность может также взять свойства, представленые экземплярами NSFetchedPropertyDescription, а модель может, запросить выборку по шаблону, представленному экземпляром NSFetchRequest.

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

Наследование сущности

Наследование сущности работает подобно наследованию класса, и полезно по тем же причинам. Если у вас есть ряд сущностей, которые являются аналогичными, вы можете учитывать общие свойства в супер-сущности. Вместо того, чтобы указать одни и те же свойства в нескольких сущностях, их можно определить в одной и унаследовать затем в под-сущностях. Например, можно определить сущность персоны с признаками Имя и Фамилия, а под-сущности сотрудники и клиенты, которые наследуют эти атрибуты.

Если создать модель с помощью инструмента моделирования данных в Xcode, необходимо указать родительский объект, выбрав имя сущности из родителей в всплывающем меню в панели информации сущности, как показано на рисунке 1.

Рисунок 1 Выбор родительского объекта в Xcode

Core Data сущность, наследование

Если вы хотите создать иерархию наследования сущностей в коде, вы должны создать ее сверху вниз. Вы не можете установить супер-сущность напрямую, вы можете установить только под-сущности (с использованием метода setSubentities:). Чтобы установить супер-сущность для заданной сущности, вы должны установить массив подсущностей для этой супер сущности и включать в него текущию сущность.

Абстрактные сущности

Можно указать, что сущность является абстрактной, то есть, что вы не будете создавать экземпляры этой сущности. Как правило, делают абстрактную сущность, если у вас есть несколько субъектов, которые представляют все специализации (наследуемые от) общего образования, которое не должно само быть создано. Например, в графическом приложении может иметься Graphic сущность, которая определяет атрибуты для координаты х и у, цвет и границы рисунка. Вы никогда, не создаете экземпляра Graphic. Конкретизированными под-сущностями Graphic могут стать Круг, Текстовое поле и Линия.

Свойства

Свойствами сущности являются ее атрибуты и связи, в том числе извлекаемые свойства (если они есть). Среди других особенностей, каждое свойство имеет имя и тип. Атрибуты также могут иметь значение по умолчанию. Имя свойства не может совпадать с каким либо из параметров имени или метода классов NSObject или NSManagedObject, например, вы не можете задать свойство с названием "description"

Временные свойства свойств, которые определяются как часть модели, но которые не сохраняются в постоянном хранилище, как часть данных сущности экземпляра. Основные данные не отслеживают изменения, вносимые в временные свойства, поэтому они записываются для операции отмены (undo).

Примечание: Если вы отмените изменения в переходных свойствах, которые используют не моделируемую информацию, Core Data не вызывает ваш набор акцессоров со старым значением, она просто обновляет снимок информации.

Атрибуты

Основные данные изначально поддерживают различные типы атрибутов, такие как строки, даты и числа (представлены в виде экземпляров NSString, NSDate и NSNumber соответственно). Также возможно использование нестандартных типов, описаных далее.

Можно указать, что атрибут является необязательным, то есть он не обязан иметь значения. В целом, не рекомендуется делать так, особенно для числовых значений (как правило, вы можете получить лучшие результаты, используя обязательный атрибут со значением по умолчанию в модели-0). Причиной этого является то, что SQL имеет особое поведение сравнения NULL, который отличен от Objective-C nil. NULL в базе данных не является тем же, что и 0, а поиски 0 не будут соответствовать столбцам с NULL.

Более того, NULL в базе данных не эквивалентно пустой строке.

Это не влияет на отношения.

Отношения

Core Data поддерживает один к одному и ко-многим отношения, и выборку свойств. Выбранные свойства представляют слабые, в одну сторону отношения.

Выборка запроса по шаблону

Вы можете использовать NSFetchRequest класс для описания выборки запросов для получения объектов из постоянного хранилища. Часто случается так, что вы хотите выполнить один и тот же запрос по несколько раз, или выполнять запросы, которые следуют заданному шаблону, но которые содержат переменные элементы (как правило, предоставляемые пользователем). Например, вы можете быть в состоянии получить все публикации написанные определенным автором, возможно, после даты, указанной пользователем во время выполнения.

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

Словари пользовательской информации

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

Конфигурации

Конфигурация имеет имя и связанный набор сущностей. Наборы могут пересекаться, то есть данная сущность может появиться более чем в одной конфигурации. Вы устанавливаете конфигурации программно с помощью setEntities:forConfiguration: или с помощью Xcode инструмента моделирования данных, а также получить сущности для данной конфигурации по имени с помощью entitiesForConfiguration:.

Обычно используются конфигурации, если вы хотите хранить различные сущности в разных хранилищах. Постоянный координатор хранилищ может иметь только одну модель управляемого объекта, поэтому по умолчанию каждое хранилище, связанное с данным координатором должно содержать те же сущности. Чтобы обойти это ограничение, вы можете создать модель, которая содержит совокупность всех объектов, которые нужно использовать. Затем создаются конфигурации в модели для каждого из множества субъектов, которые вы хотите использовать. Вы можете использовать эту модель при создании координатора. Когда вы добавляете хранилище, можно указать различные атрибуты хранилища в конфигурации. Когда вы создаете конфигурацию, помните, что Вы не можете создавать кросс-хранилищные отношения.

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac