如果我有一个函数将NSNotification作为参数,我是否需要添加观察者

时间:2015-07-10 19:28:28

标签: ios swift nsnotificationcenter nsnotification

就像问题标题

一样

因为我有像

这样的代码
func receieveNotification(notification : NSNotification) {

    ......verify notification
    ......retrieve userInfo

}

我还需要将观察者添加到NSNotificationCenter.defaultCenter()吗? 如果我做。怎么样?

2 个答案:

答案 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并删除Observershttp://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的文档并阅读通知编程主题