クラスで何かの処理が終わったとき、ViewController クラスへ通知したいときがあります。
そういった場合にはその名のとおり NSNotificationCenter を使用します。デリゲートパターンを使う方法もありますが、NSNotificationCenter の方が直感的に理解できるかもしれません。
今回はこの NSNotificationCenter の使い方を、サンプルを交えながら説明したいと思います。
NSNotificationCenter の使い方
NSNotificationCenter を使用するためには定義・登録をしなければ使用できません。
全体の流れとしては、
- NSNotificationCenterの定義・登録
- NSNotificationCenterへ通知を依頼(送信)
- NSNotificationCenterから通知を受ける(受信)
- NSNotificationCenterの削除
といった感じになります。以下に順を追って説明します。
-
- NSNotificationCenterの定義
-
[code]
// Define Notification(定義)
let MyNotification = “MyNotification”
[/code] - NSNotificationCenterの登録
-
[code]// Register Notification(登録)
NSNotificationCenter.defaultCenter().addObserver(self, selector: “myFunc:”, name: MyNotification, object: nil)[/code]
-
- NSNotificationCenterへ通知を依頼(送信)
-
[code]// Post Notification(送信)
let ns = NSNotificationCenter.defaultCenter()
ns.postNotificationName(MyNotification, object: nil)[/code]
-
- NSNotificationCenterから通知を受ける(受信)
-
[code]// Notification Method(通知受信時のメソッド)
func myFunc(notification: NSNotification?) {
// Notification 受信時の処理
}[/code]
-
- NSNotificationCenterの削除
-
[code]// Remove Notification(削除)
NSNotificationCenter.defaultCenter().removeObserver(self)[/code]
サンプルコード
以下はアプリケーションがバックグラウンドになったとき AppDelegate クラスから MainViewController へ通知を行うサンプルです。
AppDelegate
[code]
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// Define Notification(定義)
let ApplicationDidEnterBackgroundNotification = “ApplicationDidEnterBackgroundNotification”
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return true
}
func applicationDidEnterBackground(application: UIApplication) {
// Post Notification(送信)
let ns = NSNotificationCenter.defaultCenter()
ns.postNotificationName(ApplicationDidEnterBackgroundNotification, object: nil)
}
}
[/code]
MainViewController
[code]
import UIKit
class MainViewController: UIViewController {
// Define Notification(定義)
let ApplicationDidEnterBackgroundNotification = “ApplicationDidEnterBackgroundNotification”
override func viewDidLoad() {
super.viewDidLoad()
// Register Notification(登録)
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: “applicationDidEnterBackground:”,
name: ApplicationDidEnterBackgroundNotification,
object: nil
)
}
// Notification Method(通知受信時のメソッド)
func applicationDidEnterBackground(notification: NSNotification) {
println(“applicationDidEnterBackground!”)
}
}
[/code]
まとめ
NSNotificationCenter の使用できる場面は限定的なものになってしまいますが、何か新しいクラスを作成するときに、完了処理等に NSNotificationCenter をあらかじめ実装しておけば、後々便利に場面もあるかと思います。
また、NSNotificationCenter の記述は冗長になりがちなので乱用は禁物ですが、言語に慣れないうちは、使う場面を選びながら使用すればコードの可読性があがり、メンテナンスがしやすくなるかと思います。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。