Ios NotificationCenter addObserver(观察者:选择器:名称:对象)——什么是对象?
我无法理解Ios NotificationCenter addObserver(观察者:选择器:名称:对象)——什么是对象?,ios,swift,notificationcenter,Ios,Swift,Notificationcenter,我无法理解NotificationCenter.default.addObserver(observer:selector:name:object) 如果我理解正确,它就像一种过滤器;将仅观察从此对象发布的通知。但我似乎不知道如何使用它 我创建了一个类并创建了它的全局实例 class FooClass { func postNotification() { NotificationCenter.default.post(name: NSNotification.Name(
NotificationCenter.default.addObserver(observer:selector:name:object)
如果我理解正确,它就像一种过滤器;将仅观察从此对象发布的通知。但我似乎不知道如何使用它
我创建了一个类并创建了它的全局实例
class FooClass {
func postNotification() {
NotificationCenter.default.post(name: NSNotification.Name("TestNotification"), object: self)
}
}
let globalFoo = FooClass()
然后在我的第一个ViewController中,我按下一个按钮,该按钮调用globalFoo.postNotification()
然后在我的第二个ViewController中,我注册如下:
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(notificationReceived), name: NSNotification.Name("TestNotification"), object: globalFoo)
}
func notificationReceived() {
print("notification received")
}
}
当我没有指定
对象(即nil)时,它可以正常工作,因此我显然误解了它是什么。发布通知时使用的对象
参数用于指示实际发布通知的对象
添加观察者时,您可以将object
nil保留,无论哪个对象实际发送了通知,您都将获得所有命名的通知。或者,您可以在添加观察者时指定特定对象,然后仅当该特定对象发布命名通知时才会收到通知。发布通知时使用的对象
参数用于指示实际发布通知的对象
添加观察者时,您可以将object
nil保留,无论哪个对象实际发送了通知,您都将获得所有命名的通知。或者,您可以在添加观察者时指定特定对象,然后仅当该特定对象发布命名通知时才会收到通知。某些通知使用此参数为观察者提供更合适的信息
例如,像NSManagedObjectContextObjectsDidChange
这样的通知可以选择接受NSManagedObjectContext
对象,以便它只能从该上下文通知更改。一些通知使用此参数向观察者提供更合适的信息
比如说,,像NSManagedObjectContextObjectsDidChange
这样的通知可以选择性地接受NSManagedObjectContext
对象,以便它只能从该上下文通知更改。Hmm…当我指定globalFoo作为发送方和接收方时,我想我正在这样做。请确保视图的viewDidLoad
方法在调用FooClass
实例上的postNotification
之前,将调用控制器。谢谢。这就是问题所在。它按预期工作。干杯。嗯……当我指定globalFoo作为发送方和接收方时,我以为我正在这么做。在调用FooClass
实例的postNotification
之前,请确保调用视图控制器的viewDidLoad
方法。谢谢。这就是问题所在。它按预期工作。干杯。对了,这就是我从阅读文档中了解到的。但是,在我上面给出的示例中,当我指定与发送方和接收方相同的全局对象时,为什么它不起作用呢?对,这是我从阅读文档中了解到的。但是,在我上面给出的示例中,当我指定与发送方和接收方相同的全局对象时,为什么它不起作用呢?我回滚了您上次的编辑。不要编辑你的问题来显示答案,只需接受一个答案(正如你所做的那样)。我回滚了你上次的编辑。与其编辑你的问题来显示答案,不如简单地接受一个答案(正如你所做的那样)。