Делегат приложения AppDelegate

Делегат приложения AppDelegate

Из прошлых уроков уже известно что из себя представляет делегат в iOS. Мы даже сталкивались с некоторыми из них. Например, с UITableViewDelegate и UICollectionViewDelegate. Пришло время узнать о том, что и само приложение целиком имеет свой делегат, который создаётся Xcode автоматически и называется AppDelegate. В этом уроке мы подробно рассмотрим его наиболее используемые методы и найдем им практическое применение.

Откройте любой из проектов, которые мы написали ранее. В навигаторе найдите файл AppDelegate.swift и откройте его в редакторе. Необычайно много текста, неправда ли? Не стоит пугаться, так как на самом деле методов здесь «раз-два и обчелся». Всё остальное это комментарии, которые лишь объясняют для чего каждый из них предназначен. Рассмотрим их все по порядку и приведем примеры когда и какой использовать.

Начнем с «главного» метода application:didFinishLaunchingWithOptions:. Главным я его назвал лишь потому, что этот метод срабатывает только раз: при открытии приложения (загрузке его в память). Из комментариев становится ясно, что он предназначен для конфигурации аппа. К примеру, здесь можно кастомизировать глобальный интерфейс приложения, загружать необходимые данные из базы данных, либо же определять какой экран нужно загрузить первым (в обход storyboard).

Рассмотрим последний пример на практике. Откройте сториборд и выделите контроллер, который отображается изначально. Откройте Identity inspector и в поле Storyboard ID напишите «MainController»:

Делегат приложения AppDelegate

Опция Storyboard ID

Теперь добавьте стандартный контроллер представления и задайте ему идентификатор «AltController». Поместите на него любой объект интерфейса, чтобы Вы без проблем смогли различить их. Именно по этим идентификаторам мы будем «добираться» до контроллеров из кода.

Имена Storyboard ID могут быть разными, но обязательно уникальными. Старайтесь давать названия, которые сами собою дадут понять какой контроллер Вы хотите получить.

Вернемся в AppDelegate и добавим следующий код:

Запустите приложение и Вы увидите, что по окончанию загрузки отобразиться AltController. И это несмотря на то, что в storyboard у MainController активна опция Is Initial View Controller.

Переходим дальше и на очереди у нас applicationWillResignActive:. Делегат вызывает данный метод когда юзер только начал сворачивать приложение. Также он вызывается при входящих звонках, начале работы будильника и т.д. В данном методе Apple советует останавливать любые активные задачи, таймеры и тому подобное.

Метод делегата applicationDidEnterBackground: срабатывает, когда приложение уже закончило переход в background (фоновый режим работы). Здесь лучше всего сохранять какие-нибудь промежуточные данные пользователя, останавливать работу различных СДК, либо же сохранять идентификатор последнего активного окна, если Вам нужно открыть его при возобновлении работы приложения.

Метод applicationWillEnterForeground: делегат приложения вызывает, когда апп возвращается в foreground из бэкграунда. В этот момент пользователь еще не видит интерфейс приложения, поэтому здесь Вы можете восстановить все необходимые данные и вернуть изменения, сделанные в предыдущем методе.

applicationDidBecomeActive: срабатывает когда приложение уже стало активным и пользователь видит интерфейс аппа. Обновляйте здесь интерфейс различными данными, восстанавливайте работу таймеров, сторонних СДК и т.д.

Последний метод из списка — applicationWillTerminate: вызывается когда пользователь «убивает» приложение (закрывает и оно удаляется из памяти системы). Если у Вас нет необходимости сохранять важные данные в applicationDidEnterBackground:, то обязательно делайте это здесь. Кстати, если апп будет поддерживать активную работу в бэкграунде, то applicationWillTerminate: не сработает и вместо него вызовется всё тот же applicationDidEnterBackground:.

Мы рассмотрели все основные и наиболее «популярные» методы, которые использует делегат приложения. Но и это далеко не всё. Поднимитесь к началу AppDelegate и, зажав клавишу cmd, кликните на UIApplicationDelegate, чтобы просмотреть их все:

Делегат приложения AppDelegate

Открытие протокола UIApplicationDelegate

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