NotificationCenter addObserver(observer:selector:name:object) - 什么是对象?

时间:2017-04-25 02:26:00

标签: ios swift notificationcenter

我无法理解object

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")
    }

}

当我没有指定object(即零)时,它工作正常,所以很明显我误解了它是什么。

2 个答案:

答案 0 :(得分:4)

发布通知时使用的SELECT VISA41717.Fraud_Post_Date, VISA41717.Merchant_Name_Raw, VISA41717.Merchant_City, VISA41717.Merchant_Country, VISA41717.Merchant_Category_Code, VISA41717.ARN, VISA41717.POS_Entry_Mode, VISA41717.Fraud_Type, VISA41717.Local_Amt, VISA41717.Fraud_Amt, VISA41717.Purch_Date, VISA41717.Currency_Code, VISA41717.Cashback_Indicator, VISA41717.Card_Account_Num, BIN.BANK, BIN.COUNTRY, LEFT(Card_Account_Num, 6) AS VBIN FROM VISA41717, BIN LEFT JOIN MASTERCARD_VISA ON (VISA41717.ARN = MASTERCARD_VISA.MICROFILM_NUMBER AND VBIN = B.INT); WHERE VISA41717.ARN IS NULL OR MASTERCARD_VISA.MICROFILM_NUMBER IS NULL ORDER BY VISA41717.ARN; 参数用于指示实际发布通知的对象。

添加观察者时,您可以保留object nil,无论实际发送通知的对象是什么,您都将获得所有已命名的通知。或者,您可以在添加观察者时指定特定对象,然后只有在该特定对象发布命名通知时才会通知您。

答案 1 :(得分:1)

某些通知使用此参数向observer提供更合适的信息。

例如,NSManagedObjectContextObjectsDidChange之类的通知可选择接受NSManagedObjectContext对象,以便它只能从该上下文通知更改。