iOS Notifications - kgleong/software-engineering GitHub Wiki
Notifications in iOS
How to send and receive custom notifications
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
@IBOutlet weak var label: UILabel!
let notificationMessage = "Notification Received"
let notificationKey = "com.example.someNotificationKey"
@IBAction func didTapButton(sender: UIButton) {
/*
On button tap, send a notification.
The broadcast is sent using a unique notification key, which
observers can listen on.
The `object` field allows observers to filter notifications,
so normally the notification sender is used as the object.
It is, however, up to the sender to populate this field with itself
or another relevant object or `nil`.
The user info dictionary allows data to be passed to any
observers.
`userInfo` is of type `[NSObject : AnyObject]`
*/
NSNotificationCenter
.defaultCenter()
.postNotificationName(
notificationKey,
object: button,
userInfo: ["message": notificationMessage]
)
}
override func viewDidLoad() {
/*
Subscribe to receive notifications on the `name` channel.
The `object` field allows for filtering, usually by sender.
`selector` is the method that should handle any relevant notifications.
*/
NSNotificationCenter
.defaultCenter()
.addObserver(
self,
selector: #selector(ViewController.displayNotificationMessage(_:)),
name: notificationKey,
object: button
)
super.viewDidLoad()
}
func displayNotificationMessage(notification: NSNotification) {
// Unwrap the notification message from the `userInfo` field within the
// notification object.
label.text = (notification.userInfo as! [String: String])["message"]
}
}
References
Unsubscribing
deinit {
/*
Unsubscribe from all notifications to avoid attempted accesses
to deallocated objects.
*/
NSNotificationCenter.defaultCenter().removeObserver(self)
}