[英]Observer never called
我有兩個功能
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
NSNotificationCenter.defaultCenter().addObserverForName("personalDataDidLoad", object: self, queue: NSOperationQueue.mainQueue()) {_ in
print("Received notification")
self.showPersonalData()
}
loadPersonalData()
}
func loadPersonalData() {
//load data
print("personal data loaded")
NSNotificationCenter.defaultCenter().postNotificationName("personalDataDidLoad", object: nil)
但是由於某種原因
personal data loaded
而不是預期的
personal data loaded
Received notification
我可能缺少明顯的東西,但現在看不到...。
我還嘗試addObserver
帶有selector: "showPersonalData:"
但這會引發無法識別的選擇器異常。
問題出在postNotificationName
和addObserverForName
: object
的第二個參數上。 當添加觀察者並傳遞非object
值時,這意味着當通知來自該對象且僅來自該對象時,觀察者塊將運行。 但是,當您觸發通知時,您將object: nil
。 因此,您的通知將被忽略。
另一方面,傳遞object
的nil
值表示“無論誰發送,我都希望接收此通知”。
因此,您需要確保兩個地方的對象值都相同: self
或nil
。
您有理由需要使用addObserverForName(_:object:queue:usingBlock:)
嗎?
嘗試以下方法:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
NSNotificationCenter.defaultCenter().addObserver(self, "personalDataDidLoadNotification:", name: "personalDataDidLoad" object: nil)
loadPersonalData()
}
func loadPersonalData() {
//load data
print("personal data loaded")
NSNotificationCenter.defaultCenter().postNotificationName("personalDataDidLoad", object: nil)
}
func personalDataDidLoadNotification(notification: NSNotification) {
print("notification recieved")
}
標題問題的另一個答案(但不是此示例),但希望能在我最近3個小時遇到的情況下幫助其他人:
確保將您的notificationcenter觀察器添加到具有持久實例的類中。 我在另一個類的本地方法內的名為MyClass()。setupNotification的類內創建了觀察器。
這意味着觀察者被立即刪除,並且沒有針對任何實例進行持久化。
小學生錯誤-希望這可以幫助其他人進行搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.