Лекция 15 CS193P Fall 2017 — Alerts и Action Sheet, Notifications & KVO, «жизненный цикл» приложения.

В Лекции 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 доступны на платной основе.