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
方法。谢谢。这就是问题所在。它按预期工作。干杯。对了,这就是我从阅读文档中了解到的。但是,在我上面给出的示例中,当我指定与发送方和接收方相同的全局对象时,为什么它不起作用呢?对,这是我从阅读文档中了解到的。但是,在我上面给出的示例中,当我指定与发送方和接收方相同的全局对象时,为什么它不起作用呢?我回滚了您上次的编辑。不要编辑你的问题来显示答案,只需接受一个答案(正如你所做的那样)。我回滚了你上次的编辑。与其编辑你的问题来显示答案,不如简单地接受一个答案(正如你所做的那样)。