Xcode
Swift

SwiftでNSNotificationを利用してクラス間の処理を連携する

More than 3 years have passed since last update.

備忘録です

画面内で別クラスで定義している2つのVIEW(仮にAとBとします)があって、

A側がスクロールされると、B側のVIEWのデータを更新する、という処理を下記のように実装

参考にさせていただいたリンク

http://dev.classmethod.jp/references/ios-8-swift-nsnotification-userinfo/

http://qiita.com/_tid_/items/a650900c9f2b57f1a22e

//Objective-Cですがわかりやすい説明で助かりました

http://iphone-tora.sakura.ne.jp/nsnotificationcenter.html


swift

■通知を送る側

//NSNotificationのインスタンスを作成。["value":100]という辞書型のデータを持たせる
var n : NSNotification = NSNotification(name: "dummy", object: self, userInfo: ["value": 100])
//通知を送る
NSNotificationCenter.defaultCenter().postNotification(n)

■通知を受け取る側

//initなどでNSNotification登録
NSNotificationCenter.defaultCenter().addObserver(self, selector: "update:", name: "dummy", object: nil)

//関数で受け取った時のアクションを定義
func update(notification: NSNotification) {
 if let userInfo = notification.userInfo {
 let result = userInfo["value"]! as Int
 println("受信した数値:\(result)")
}
}


■わかっていないこと

・userInfoは辞書型である必要があるのかわからない(現状は辞書型)

====追記========

通知を受け取る側において、initでNSNotificationを登録した場合、

deinitでNSNotificationを開放しておかないと、画面遷移して戻ってきた時などに

エラーになりました。


swift

    deinit {

println("deinit call")
//イベントリスナーの削除
NSNotificationCenter.defaultCenter().removeObserver(self)
}

NSNotificationは後片付けが大事なのですね。

参考:

http://qiita.com/mo_to_44/items/dbc3446e0334c5e07547

http://www.hawk-a.com/exception_code/archives/1349

http://swift-salaryman.com/nsnotificationcenter.php