- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
iOS. Приемы программирования - Вандад Нахавандипур
Шрифт:
Интервал:
Закладка:
Если приложение завершено и не работает даже в фоновом режиме, то iOS инкапсулирует пуш-уведомление, инициирующее запуск приложения, в параметрах запуска. Эти параметры будут переданы методу application: didFinishLaunchingWithOptions: делегата вашего приложения. Чтобы получить объект уведомления, просто запросите параметр didFinishLaunchingWithOptions этого метода (относящийся к типу NSDictionary) и поищите ключ UIApplicationLaunchOptionsRemoteNotificationKey. Значением этого ключа и будет то пуш-уведомление, которое запустило ваше приложение.
Параметр didReceiveRemoteNotification этого свойства несет в себе словарь типа NSDictionary. Этот словарь будет содержать в себе корневой объект под названием aps. Ниже этого объекта располагается словарь со следующими ключами, зависящими от того, как сервер создал пуш-уведомление (сервер может и не прислать все ключи сразу):
• badge — значением этого ключа является номер, который будет задан для ярлыка (значка) вашего приложения;
• alert — это содержащееся в пуш-уведомлении сообщение типа String. Сервер может прислать вам модифицированную версию значения этого ключа. Такое значение само по себе будет словарем, содержащим ключи body и show-view. Если вам будет прислана такая модифицированная версия предупреждения, то ключ body будет содержать именно тот текст, который находится в теле предупреждения. Ключ show-view будет содержать логическое значение, определяющее, должно ли предупреждение отображаться для пользователя. Кнопка Action (Действие) позволяет пользователю нажать на поступившее уведомление в центре уведомлений, чтобы открыть ваше приложение;
• sound — это строка, указывающая имя звукового файла, который должно воспроизводить ваше приложение;
• content-available — значением этого ключа является число. Если здесь стоит число 1, это означает, что на сервере появился новый контент, который приложение может скачать. Сервер может послать этот ключ приложению, затребовав таким образом, чтобы оно забрало с сервера список новых элементов. Ваше приложение может и не выполнять это требование. Это просто протокол, действующий между сервером и клиентом. Если в вашем приложении это целесообразно, следуйте данному протоколу.
См. также
Раздел 15.8.
Глава 16. Фреймворк Core Data
16.0. Введение
Core Data — это мощный фреймворк, входящий в состав iOS SDK. Он позволяет программисту сохранять данные и управлять ими объектно-ориентированным способом. Традиционно программисту приходилось сохранять данные на диске, пользуясь архивационными возможностями Objective-C, либо записывать данные в файлы, а потом управлять ими вручную. С появлением Core Data программист может просто взаимодействовать с его объектно-ориентированным интерфейсом и эффективно управлять своими данными. В этой главе будет рассмотрено, как использовать Core Data для создания модели своего приложения (с применением программной архитектуры «модель — вид — контроллер»).
Фреймворк Core Data обеспечивает низкоуровневые взаимодействия с хранилищем данных устройства, то есть взаимодействия, незаметные для программиста. iOS сама определяет, как будет организовано низкоуровневое управление данными. Для реализации такого взаимодействия программисту достаточно знать, какой высокоуровневый API для этого предназначен. Но при этом важно понимать и структуру фреймворка Core Data, его внутреннее функционирование. Чтобы лучше с этим разобраться, создадим приложение, использующее Core Data.
Теперь у нас есть новый компилятор LLVM, поэтому, чтобы включить фреймворк Core Data в ваш проект, достаточно включить обобщающий заголовок этого фреймворка, вот так:
#import «AppDelegate.h»
#import <CoreData/CoreData.h>
@implementation AppDelegate
<# Остаток вашего кода находится здесь #>
Для работы с Core Data необходимо понимать стек этого фреймворка, который составляют следующие основные элементы:
• постоянное хранилище данных — объект, представляющий находящуюся на диске базу данных. Мы никогда не используем этот объект непосредственно;
координатор постоянного хранилища данных — объект, координирующий считывание информации из постоянного хранилища и запись в него. Координатор — это промежуточное звено между контекстом управляемых объектов и постоянным хранилищем данных;
модель управляемого объекта (MOM) — обычный файл на диске, который будет представлять нашу модель данных. Считайте, что это схема базы данных;
управляемый объект — этот класс представляет сущность, которую мы хотим сохранить в Core Data. В традиционном программировании баз данных такие сущности называются таблицами. Управляемый объект относится к типу NSManagedObject, экземпляры таких объектов помещаются в контекстах управляемых объектов. Они соответствуют схеме, заложенной в модели управляемого объекта, и сохраняются в постоянном хранилище данных с помощью координатора;
контекст управляемых объектов — его можно сравнить с виртуальной приборной панелью. Странно звучит, да? Сейчас все будет понятно. Мы создаем объекты Core Data в памяти, задаем их свойства и манипулируем ими. Все эти операции происходят в контексте управляемого объекта. Контекст отслеживает все операции, совершаемые над управляемыми объектами, и даже позволяет нам отменять такие действия. Представьте другую метафору: ваши управляемые объекты, находящиеся в контексте, — это игрушки, а сам контекст — это стол, на который вы их положили. Игрушки можно передвигать на столе, разбирать, убирать какие-то со стола и класть на их место новые. Итак, стол — это контекст управляемых объектов. Закончив манипуляции с объектами, вы можете сохранить его состояние. Когда мы сохраняем состояние контекста управляемых объектов, информация об операции сохранения передается в постоянное хранилище данных. Это делается посредством координатора, к которому подключен контекст. На основании этой информации координатор хранилища данных будет записывать информацию в постоянное хранилище данных, а затем — на диск.
Чтобы добавить Core Data в свой проект, а затем приступить к использованию всех его классных возможностей, просто создайте проект. Затем, когда система спросит, добавлять ли к нему Core Data, установите соответствующий флажок (рис. 16.1).
Рис. 16.1. Добавление Core Data к новому проекту Xcode
После того как вы создадите проект с Core Data, у делегата вашего приложения появится ряд новых свойств:
NSManagedObjectContext *managedObjectContext;
NSManagedObjectModel *managedObjectModel;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
Вы уже понимаете, что означают эти свойства, — они были описаны ранее в данной главе. Контекст — наш игровой стол, модель — схема базы данных, а координатор — объект, опосредующий сохранение контекста на диске. Все просто. Теперь переходим к изучению основных разделов этой главы.
16.1. Создание модели Core Data с помощью Xcode
Постановка задачи
Требуется визуально спроектировать в Xcode модель данных для вашего приложения iOS.
Решение
Следуя инструкциям из введения к данной главе, создайте проект 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

