iOS. Приемы программирования
Шрифт:
Вы уже понимаете, что означают эти свойства, — они были описаны ранее в данной главе. Контекст — наш игровой стол, модель — схема базы данных, а координатор — объект, опосредующий сохранение контекста на диске. Все просто. Теперь переходим к изучению основных разделов этой главы.
16.1. Создание модели Core Data с помощью Xcode
Постановка задачи
Требуется
Решение
Следуя инструкциям из введения к данной главе, создайте проект Core Data. Потом найдите в пакете вашего приложения файл с расширением xcdatamodel и откройте его в визуальном редакторе данных (рис. 16.2).
Рис. 16.2. Визуальный редактор данных в Xcode
Обсуждение
Визуальный редактор данных Xcode — потрясающий инструмент, позволяющий программисту с легкостью проектировать модель данных для своего приложения. Прежде чем приступить к работе с этим инструментом, необходимо усвоить два очень важных определения:
• сущность (Entity) — аналогична таблице базы данных;
атрибут (Attribute) — аналогичен столбцу в базе данных.
Позже сущности станут объектами (управляемыми объектами). Это произойдет после того, как мы сгенерируем код на базе нашей объектной модели. Об этом пойдет речь в разделе 16.2. В текущем разделе мы сосредоточимся на создании модели данных в визуальном редакторе.
В нижней части окна редактора найдите кнопку +. Щелкните правой кнопкой мыши, удерживая указатель на этом плюсике, а потом выберите из контекстного меню вариант Add Entity (Добавить сущность) (рис. 16.3).
Рис. 16.3. Добавление новой сущности к модели данных
Сущность, которую вы создали, сразу же после создания будет находиться в состоянии, позволяющем немедленно ее переименовать. Измените название этой сущности на Person (Контакт) (рис. 16.4).
Рис. 16.4. Изменение имени новой сущности на Person
Выберите сущность Person, потом щелкните на + в области Attributes (Атрибуты) и создайте для сущности три следующих атрибута (рис. 16.5):
• firstName (типа String);
• lastName (типа String);
• age (типа Integer 32).
Рис. 16.5. Мы добавили три атрибута к сущности Person
В редакторе модели данных выберите из меню View (Вид) в Xcode команду Utilities — Show Utilities (Вспомогательная
Рис. 16.6. Инспектор модели данных отображается в правой части окна Xcode
Теперь щелкните на атрибутах firstName, lastName и age сущности Person. Убедитесь, что атрибуты firstName и lastName не являются опциональными — флажок Optional должен быть снят. При этом для атрибута age флажок Optional должен быть установлен.
Итак, мы создали модель. Выполните команду File — Save (Файл — Сохранить), чтобы убедиться, что сделанные изменения сохранены. О том, как сгенерировать код на базе только что созданной вами модели, рассказывается в разделе 16.2.
16.2. Генерирование файлов классов для сущностей Core Data
Постановка задачи
Вы выполнили все инструкции из раздела 16.1. Теперь требуется научиться создавать код на основании имеющейся объектной модели.
Решение
Выполните следующие шаги.
1. В Xcode найдите созданный для вашего приложения файл с расширением xcdatamodel. Он был заготовлен на этапе создания самого приложения в Xcode. Щелкните на этом файле — и вы должны увидеть, как в правой части окна Xcode открывается редактор.
2. Выберите сущность Person, созданную нами ранее (см. раздел 16.1).
3. Выполните в Xcode команду File — New File (Файл — Новый файл).
4. В диалоговом окне New File (Новый файл) убедитесь, что выбрали iOS в качестве основной категории, а Core Data — в качестве подкатегории. Потом укажите в правой части окна элемент NSManagedObject subclass (Подкласс NSManagedObject) и нажмите Next (Далее) (рис. 16.7).
Рис. 16.7. Создание в Xcode подкласса управляемого объекта
5. На следующем экране выберите модель управляемого объекта, которую вы хотите сохранить на диске, и отметьте ее флажком. Сделав это, нажмите кнопку Next (Далее) (рис. 16.8).
Рис. 16.8. Выбор модели управляемого объекта для сохранения на диске
Если в вашем проекте всего одна модель, то и в списке вы увидите всего одну модель управляемого объекта. Но на рис. 16.8 мы видим много моделей. Дело в том, что в моем рабочем пространстве в Xcode присутствует множество проектов и каждый из них имеет свою модель.