【通知】任意のタイミングで呼出!
「アプリの終了時に自動保存したい!」
「他のアプリから戻った時に、パスワード画面を表示したい!」
などなど、然るべきタイミングで処理を実行させたいときがあると思います。
そんな時に使えるのが「NotificationCenter」です。
「NotificationCenter」の簡単な使い方
「NotificationCenter」の簡単な使い方について説明します。
通知を登録!
まず、こちらが「登録」のためのソースコード。
let center = NotificationCenter.default
center.addObserver(self,
selector: #selector(メソッド名),
name: .UIApplicationWillTerminate,
object: nil)
「NotificationCenter」を利用して通知を受け取るためには、あらかじめ上記のメソッドを実行し「登録」しておくことが必要です。ViewDidLoadなどに書いておきましょう。
メソッド名の部分には「testMethod」などのようにメソッド名のみ記述するようにします。かっこは必要ありません。
name: .UIApplicationWillTerminate,
この部分を変更することで、通知タイミングを変更することができます。ちなみに上記の例「UIApplicationWillTerminate」は「アプリが終了時に通知する」というものです。
name: .UIApplicationDidEnterBackground,
↑「アプリがバッググラウンドになったら通知する」
name: .UIApplicationWillEnterForeground,
↑「アプリがフォアグラウンドになったら通知する」
UIApplicationDidBecomeActive - NSNotification.Name | Apple Developer Documentation
公式サイトに通知タイミング一覧が記載されているので、必要に応じて選択しましょう!(リファレンスの反映が遅れているのか、たまに古い名前のままのがありますけど)
通知を解除!
登録した通知は、使わなくなったタイミングで解除することができます。
iOS 9.0以降、解除は任意になりました。必要な場合のみ実装しましょう。
(例:はじめの1回だけ通知し、それ以降は通知したくない場合などです。)
center.removeObserver(self,
name: .UIApplicationWillTerminate,
object: nil)
「NotificationCenter」よりもさらに簡単な「AppDelegate.swift」の5つのメソッド
下記の5つの通知については「AppDelegate.swift」にてあらかじめ用意されています。
func applicationWillResignActive(_ application: UIApplication) {
// アプリがバックグラウンドになる直前
}
func applicationDidEnterBackground(_ application: UIApplication) {
// アプリがバックグラウンドになった瞬間
}
func applicationWillEnterForeground(_ application: UIApplication) {
// アプリがバックグラウンドから戻った瞬間
}
func applicationDidBecomeActive(_ application: UIApplication) {
// アプリがアクティブになった瞬間
}
func applicationWillTerminate(_ application: UIApplication) {
// アプリ終了時
}
複雑でない処理ならば、「AppDelegate.swift」のメソッドに直接記述してしまってもいいかもしれません。