В Лекции 15 освещаются 3 темы:
- Экстренные сообщения Alerts и списки действий Action Sheets
- Уведомления Notifications («радиостанции») и KVO
- “Жизненный цикл” приложения (UIApplication, AppDelegate, Info.plist, Capabilities)
Alerts (экстренные уведомления) и Action Sheets (списки действий)
В iOS существуют два типа механизмов, которые позволяют с помощью “всплывающего окна” что-то спросить у пользователя. Один называется Alert (экстренное сообщение), а другой — Action Sheets (список действий).
Они используют один и тот же API. Оба модальные, то есть занимают весь экран, но Alert всегда всплывает в середине экрана. Имеется некоторая разница между этими двумя механизмами. Особое внимание уделяется появлению Action Sheets в Popover «окошке» на iPad. Экстренные сообщения Alerts могут иметь текстовые поля, но профессор категорически против их использования для диалога с пользователем, их назначение — экстренные сообщения. В качестве демонстрационного примера Пол Хагерти взял уже знакомое нам приложение Emoji Art и на нем продемонстрировал использование Alert для уведомления пользователя о невозможности размещения фонового изображения на эмоджи картине.
Notification («радиостанции») и KVO
Это действительно важная часть MVC шаблона конструирования. Она нужна для «слепой» передачи структурированной информации от Model к Controller или от View к Controller. View Controllers подписываются на слушание определенных «радиостанций» и, таким образом, узнают о событиях в Model или View приложения. В iOS есть два способа взаимодействия через “радиостанцию”: Notifications и KVO (KVO — это сокращение для Key Value Observing).
Основным следует считать Notifications, а KVO имеет слишком много ограничений: он действует в subclasses класса NSObject, «наблюдаемое» свойство должно быть, что называется, Key Value Coding (сокращенно KVC) -совместимым. Правда есть несколько готовых свойств, рассеянных по iOS фреймворкам, которые являются KVС — совместимыми и работают с механизмом KVO. Наиболее заметными KVO свойствами являются center и frame класса UIView. Так что вы можете “наблюдать” center и / или frame вашего view и обнаруживать его перемещение.
В лекции 15 подробно рассказывается о том, как в iOS организован механизм передачи уведомлений Notification с помощью «радиостанции», описываемых классом Notification: как получить уведомление путем прослушивания вещания определенной «радиостанции» (уже существующей в iOS или своей собственной), как создать свою собственную «радиостанцию» и послать уведомление, как извечь дополнительную информацию userInfo из транслируемого уведомления.
Профессор показывает великолепный демонстрационный пример, в котором задействованы все три механизма «слепого» структурированного взаимодействия : делегирование, Notification и KVO. Мы видим, как один механизм сменяет другой и как при этом упрощается код.
Application Lifecycle («жизненный цикл» приложения)
Приложение имеет 5 состояний:
- режим Not Rundung (Не запущено), в котором идет подготовка к запуску
- режим Foreground, в котором приложение может находится либо в состоянии Inactive (запущено, но нет UI событий) либо в состоянии Active (запущено, получает и обрабатывает UI события).
- режим Background, в котором код может работать только ограниченное время и нет UI событий.
- режим Suspended, в котором код не работает и приложение может быть «убито» в любой момент времени.
В Лекции 15 рассказывается о том, как осуществляется ПЕРЕХОД между этими состояниями и какие возникают уведомления Notification на уровне приложения. Рассматриваются различные варианты задания установок для приложения, в том числе и с помощью Info.plist.
Некоторые режимы в вашем приложении редко бывают активны, поэтому они требуют явного “включения” для их использования. И вы можете это сделать на закладке Сapabilities в установках вашего проекта Project Setting.
Некоторые из этих внешних ресурсов требуют использования серверов, такие как Apple Pay, iCloud и Game Center. Есть те, которые не требуют серверов, например, Maps, Inter-App Audio, Home Kit.
Те ресурсы, которые требуют включения сервера, вы можете “включить” только, если вы являетесь участником программы “Apple Developer Program”, которая стоит $99 в год. И можно понять, почему это платная услуга. Потому что доступ ко всем этим серверным технологиям требует присутствия некоторого механизма на серверной стороне, который бы знал о вас и ваших потребностях и поставлял бы вам необходимый материал. Они реально должны знать, кто вы такой.
Код демонстрационного примера для Лекции 15, который послал професcор, находится на Github для iOS 11 и на Github для iOS 12 в папке EmojiArt L15. Лекция 15 и слайды на английском языке находятся на iTunes название “15. Alerts and Action Sheet, Notifications & KVO, Application Life Cycle.”
Русскоязычный неавторизованный конспект Лекции 15, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также в формате Google Doc доступны на платной основе.