[英]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.