開発中にコールバックが必要になったので備忘録。
ViewController.swift
...
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// 通知の監視
NSNotificationCenter.defaultCenter().addObserver(self, selector: "callBack:", name: "callBack", object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "callBackError:", name: "callBackError", object: nil)
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
// 監視の終了
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func callBack(notification: NSNotification) {
// バックグラウンドスレッドからの通知を受け取る予定
dispatch_async(dispatch_get_main_queue(), {
let myObject = notification.object
...
})
}
func callBackError(notification: NSNotification) {
// バックグラウンドスレッドからの通知を受け取る予定
// メインスレッドに移さないと画面表示できない
dispatch_async(dispatch_get_main_queue(), {
let myAlert = UIAlertController(title: "FAILED", message: "Error message", preferredStyle: .Alert)
self.presentViewController(myAlert, animated: true, completion: nil)
})
}
...
SampleViewController.swift
...
// 通知を投げる
if isErrorFlag {
NSNotificationCenter.defaultCenter().postNitificationName("callBackError", object: nil, userInfo: nil)
} else {
let message = "SUCCESS"
NSNotificationCenter.defaultCenter().postNitificationName("callBack", object: message, userInfo: nil)
}
...