【问题标题】:Add observe isn't working in Swift 4添加观察在 Swift 4 中不起作用
【发布时间】:2017-10-02 13:12:47
【问题描述】:

当我在查看如何从另一个视图中调用函数时,我发现 NotificationCenter 是一个很好的解决方案,所以我尝试像这样使用它:

在我想调用函数的主视图(ViewController)中,我放了这个:

NotificationCenter.default.addObserver(
            self,
            selector: #selector(ViewController.loyalty),
            name: NSNotification.Name("loyalty"),
            object: nil)

在我调用 self.dismiss(animated: true, completion: nil) 之前的第二个视图中,我调用它来触发观察:

NotificationCenter.default.post(name: NSNotification.Name("loyalty"), object: nil)

最后在 swift 4 更新后,我的函数 loyaltyfunc 之前有 @objc,它是这样的:

@objc func loyalty(){
}

PS 我也试过 NSNotification.Name(rawValue: "loyalty")

也许我忘了做某事?

提前致谢!

编辑:

在我忘记删除一些数组之后,该函数正在执行,这就是我认为它不起作用的原因。

【问题讨论】:

  • 也许你正在删除viewWillDisappear中的观察者。
  • @the4kman 感谢您的评论,但我没有删除它(我检查确定)
  • 您是否要在代码中的其他位置删除观察者?
  • @the4kman 不,我用 cmd+f 搜索它以确保
  • @the4kman 该函数毕竟正在执行,但我忘记擦除我的数组以获得正确的结果。 (我在函数开始时通过打印发现了它)。很抱歉浪费您的时间...

标签: ios swift swift4 observers nsnotifications


【解决方案1】:

苹果文档说:

在 OS X 10.11 和 iOS 9.0 中,NSNotificationCenter 和 NSDistributedNotificationCenter 将不再向可能被释放的已注册观察者发送通知。

所以我认为您的控制器在收到通知之前在dismiss 之后被释放。

【讨论】:

  • 也感谢您的回答和很好的信息!该函数毕竟正在执行,但我忘记擦除我的数组以获得正确的结果。 (我在函数开始时通过打印发现了它)。很抱歉浪费您的时间...
【解决方案2】:

我认为该函数应该有一个要调用的参数。

尝试将您的函数编辑为:

@objc func loyalty(_ notification : NSNotification){
}

而选择器变成#selector(ViewController.loyalty(_:)

注意:register/post 都应该在同一个 Thread 中调用

【讨论】:

  • 也感谢您的回答和很好的信息!该函数毕竟正在执行,但我忘记擦除我的数组以获得正确的结果。 (我在函数开始时通过打印发现了它)。很抱歉浪费您的时间...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
相关资源
最近更新 更多