我有2个ViewController VCA和VCB。我在viewDidAppear中设置的VCA中有一个观察员
我从VCA导航到VCB,然后当您按VCB上的一个按钮时,将发布执行某些功能的通知 然后我撤消了VCB,VCA又出现了
//VCB
@IBAction func buttonPressed(_ sender: Any) {
NotificationCenter.default.post(name: Notification.Name("name"), object: nil)
}
@IBAction func backButtonPressed(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
//VCA
override func viewDidAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(self.someFunction), name: Notification.Name("name"), object: nil)
}
现在的问题是,一旦VCA出现,它将添加另一个观察者 我知道问题是我需要删除Observer,但是如果我在viewWillDisappear中删除它,则通知将永远不会被调用,因为它在我可以发布之前就被删除了
我试图像这样删除VCB中的观察者
@IBAction func backButtonPressed(_ sender: Any) {
let vc = self.storyboard?.instantiateViewController(withIdentifier: "VCA") as! VCA
NotificationCenter.default.removeObserver(vc, name: Notification.Name("stateChange"), object: nil)
dismiss(animated: true, completion: nil)
}
但这没用
因此,在关闭VCB时,需要从VCB中删除VCA中的观察者。 我已经看过Remove notification observer from another view controller
但是它在OBJC中,我无法完全理解它,此外,OP还没有将其标记为正确的解决方案,也没有评论它确实起作用
答案 0 :(得分:0)
首先最好在此设置一个委托,而不是通知中心,因为后者用于1-M而不是1-1通知
第二您可以在viewDidLoad
如果您需要在关闭vcB之后将其删除,则可以使用功能someFunction
的结尾
NotificationCenter.default.removeObserver(self)