Ios 从另一个viewController中删除通知观察者
我有两个VIEW控制器VCA和VCB。我在VIEWDID中设置了VCA中的观察者 我从VCA导航到VCB,然后当您按下VCB上的按钮时,会发布通知,该通知执行某些功能 然后我关闭VCB,VCA再次出现Ios 从另一个viewController中删除通知观察者,ios,swift,Ios,Swift,我有两个VIEW控制器VCA和VCB。我在VIEWDID中设置了VCA中的观察者 我从VCA导航到VCB,然后当您按下VCB上的按钮时,会发布通知,该通知执行某些功能 然后我关闭VCB,VCA再次出现 //VCB @IBAction func buttonPressed(_ sender: Any) { NotificationCenter.default.post(name: Notification.Name("name"), object: nil) }
//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出现,它就会添加另一个观察者
我知道问题是我需要删除观察者,但如果我在ViewWillEnglish中删除它,通知将永远不会被调用,因为它在我发布之前就被删除了
我试图像这样移除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中的观察者。
我已经看过了
但是它在OBJC中,我没有完全理解它,而且OP没有将它标记为正确的解决方案,或者没有评论它确实起作用首先最好在这里设置一个代理,而不是通知中心,因为后者用于1-M而不是1-1通知 Second您可以在
viewDidLoad
如果在关闭vcB后需要将其移除,则结束函数someFunction
do
NotificationCenter.default.removeObserver(self)
在“viewDidLoad”中添加观察者谢谢您的回答!。在这种情况下,我将如何使用委托?另外,如果我将其添加到“someFunction”的末尾,那么通知将只发布一次。我希望每次用户按下臀部时都会发布通知,如果是这样,则将其保留。不要移除观察者或将其再次添加到vcBIf的操作中。如果我不移除观察者,则每次按下时都会多次发布通知,如果我在视图控制器之间来回移动,但感谢您的回答,我检查了代表,他们解决了这个问题