【问题标题】:Selector function not being entered when observer is added添加观察者时未输入选择器功能
【发布时间】: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


【解决方案1】:

NSNotificacionCenter 是观察者模式的一种变体,您可以阅读它here

这意味着您必须在发布任何通知之前注册观察员。如果您在此之前发布任何内容,NSNotificationCenter 将查看 name 的观察者,并会看到没有人在监听它,因此不会发生任何事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    相关资源
    最近更新 更多