我无法理解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
(即零)时,它工作正常,所以很明显我误解了它是什么。
答案 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
对象,以便它只能从该上下文通知更改。