【发布时间】:2020-09-24 00:52:54
【问题描述】:
在我的第一个视图控制器中,我使用以下代码发布通知:
NotificationCenter.default.post(name: Notification.Name("date"), object: formattedDate)
然后我使用以下代码在第二个视图控制器中“接收”通知:
func receiveNotification () {
NotificationCenter.default.addObserver(self, selector: #selector(self.didGetTheDate(_:)), name: NSNotification.Name("date"), object: nil)
}
@objc
func didGetTheDate(_ notification: Notification) {
print("In did get date")
date = notification.object as! String
}
但是,函数“didGetTheDate”永远不会被调用。 我已经三重检查了函数“receiveNotification”是否被调用,因为我添加了打印语句来检查这一点。
谁能帮帮我。
【问题讨论】:
-
你在发布通知之前添加了观察者吗?我的意思是,在您从 ViewController 1 发布通知之前应该调用 receiveNotification()。此外,您不能释放 ViewController 2,因为观察者将被释放
-
我在发布通知后添加了观察者。如果通知尚未发布,我如何收到通知? “另外,您不能释放 ViewController 2,因为观察者将被释放”是什么意思。对不起,我对此很陌生
-
如果你想将事件从一个 VC 传递到另一个,你需要一个队列,在这种情况下你可以创建一个带有列表的单例,你可以调用它来查看是否有新的 "日期”事件。要发布 VC 2,您应该看看内存在 iOS 和 ARC 上的工作原理
-
哦,我刚刚知道了,非常感谢,我被困了好几个小时。因此,需要首先添加一个观察者,因为它“查找”具有相同 NSNotification.Name 的帖子。
-
没错,NSNotificacionCenter 是观察者模式的一种变体,你可以在这里阅读:tutorialspoint.com/design_pattern/observer_pattern.htm(我会添加这个作为未来用户的答案)
标签: swift xcode nsnotificationcenter addobserver