添加观察在 Swift 4 中不起作用
Posted
技术标签:
【中文标题】添加观察在 Swift 4 中不起作用【英文标题】:Add observe isn't working in 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 更新后,我的函数 loyalty
在 func
之前有 @objc
,它是这样的:
@objc func loyalty()
PS 我也试过 NSNotification.Name(rawValue: "loyalty")
也许我忘了做某事?
提前致谢!
编辑:
在我忘记删除一些数组之后,该函数正在执行,这就是我认为它不起作用的原因。
【问题讨论】:
也许你正在删除viewWillDisappear
中的观察者。
@the4kman 感谢您的评论,但我没有删除它(我检查确定)
您是否要在代码中的其他位置删除观察者?
@the4kman 不,我用 cmd+f 搜索它以确保
@the4kman 该函数毕竟正在执行,但我忘记擦除我的数组以获得正确的结果。 (我在函数开始时通过打印发现了它)。很抱歉浪费您的时间...
【参考方案1】:
苹果文档说:
在 OS X 10.11 和 ios 9.0 中,NSNotificationCenter 和 NSDistributedNotificationCenter 将不再向可能被释放的已注册观察者发送通知。
所以我认为您的控制器在收到通知之前在dismiss
之后被释放。
【讨论】:
也感谢您的回答和很好的信息!该函数毕竟正在执行,但我忘记擦除我的数组以获得正确的结果。 (我在函数开始时通过打印发现了它)。很抱歉浪费您的时间...【参考方案2】:我认为该函数应该有一个要调用的参数。
尝试将您的函数编辑为:
@objc func loyalty(_ notification : NSNotification)
而选择器变成#selector(ViewController.loyalty(_:)
注意:register
/post
都应该在同一个 Thread
中调用
【讨论】:
也感谢您的回答和很好的信息!该函数毕竟正在执行,但我忘记擦除我的数组以获得正确的结果。 (我在函数开始时通过打印发现了它)。很抱歉浪费您的时间...以上是关于添加观察在 Swift 4 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 的 Swift addTarget 在 UIView 中不起作用
CoreLocation requestWhenInUseAuthorization() 在 Swift 中不起作用
为啥两个表格视图单元格中的两个集合视图在 Swift 4 中不起作用?