Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从另一个viewController中删除通知观察者_Ios_Swift - Fatal编程技术网

Ios 从另一个viewController中删除通知观察者

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) }

我有两个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)
}

 @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的操作中。如果我不移除观察者,则每次按下时都会多次发布通知,如果我在视图控制器之间来回移动,但感谢您的回答,我检查了代表,他们解决了这个问题