就像问题标题
一样因为我有像
这样的代码func receieveNotification(notification : NSNotification) {
......verify notification
......retrieve userInfo
}
我还需要将观察者添加到NSNotificationCenter.defaultCenter()吗? 如果我做。怎么样?
答案 0 :(得分:0)
是的,这是必需的。
使用它:从一个很棒的教程中摘取的片段: http://natashatherobot.com/ios8-where-to-remove-observer-for-nsnotification-in-swift/
class FirstViewController: UIViewController {
@IBOutlet weak var sentNotificationLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateNotificationSentLabel", name: mySpecialNotificationKey, object: nil)
}
// 2. Post notification using "special notification key"
@IBAction func notify() {
NSNotificationCenter.defaultCenter().postNotificationName(mySpecialNotificationKey, object: self)
}
func updateNotificationSentLabel() {
self.sentNotificationLabel.text = "Notification sent!"
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
}
进一步的主题:Swift并删除Observers
:
http://natashatherobot.com/ios8-where-to-remove-observer-for-nsnotification-in-swift/
答案 1 :(得分:0)
当某个对象在NSNotification
上调用post
方法时,会发送NSNotificationCenter
。然后,通知中心在已注册的每个对象上调用指定的接收方法。
如果您没有在通知中心注册,那么系统无法知道它应该向您发送通知。虽然可以有其他注册中心,但在iOS中几乎总是使用默认注册中心。
当您注册通知时,您可以指定要接收通知的对象,要调用的对象上的方法,要注册的通知以及要接收通知的发件人从。如果您希望收到特定类型的通知中的每一个(也就是说,您不关心哪个对象发送了它),您可以为发件人指定nil
。
因此,要注册通知“MyNotification”,并且您不关心发送它的对象,请调用以下内容:
NSNotificationCenter.defaultCenter().addObserver(self, "gestureHandler", "MyNotification", nil)
此调用的位置取决于您希望此对象何时进行侦听。例如,如果接收器是UIView
,您可能希望在视图即将显示时注册,而不是在创建视图时注册。
当您想要停止接收通知时,例如当接收器超出范围时,取消注册非常重要。你可以通过调用'removeObserver()`来完成这个。
您应该搜索Xcode的文档并阅读通知编程主题。