簡體   English   中英

觀察者從未打電話

[英]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:"但這會引發無法識別的選擇器異常。

問題出在postNotificationNameaddObserverForNameobject的第二個參數上。 當添加觀察者並傳遞非object值時,這意味着當通知來自該對象且僅來自該對象時,觀察者塊將運行。 但是,當您觸發通知時,您將object: nil 因此,您的通知將被忽略。

另一方面,傳遞objectnil值表示“無論誰發送,我都希望接收此通知”。

因此,您需要確保兩個地方的對象值都相同: selfnil

您有理由需要使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM