一次点击多次调用Notificationcenter函数?

时间:2017-10-11 11:22:23

标签: swift notificationcenter

我有一个应用程序,当NotificationCenter中按下按钮时,会使用viewControllerA来调用viewControllerB中的某个功能。它按预期工作,有点像。这是一般设置: 的 ViewControllerA

override func viewDidLoad() {

    NotificationCenter.default.addObserver(self, selector: #selector(self.reloadMainPageVC), name: NSNotification.Name(rawValue: NotificationName.reloadingMainPageVC), object: nil)

}
func reloadMainPageVC(){
    //appends some arrays
    self.tableView.reloadData()
    print("we reloaded viewControllerA")
}

这些函数允许重新加载viewControllerA的tableview。可以通过按下viewControllerB中的按钮来调用它 的 ViewControllerB

func postNotificationtoReloadMainPageVC() {
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: NotificationName.reloadingMainPageVC), object: nil)
}
@IBAction func buttonTap(_ sender: UIButton) {
    postNotificationReloadMainPageVC()
}

这可以理解为按下viewControllerB中的按钮确实会重新加载viewControllerA中的表格。第一次点击此按钮重新加载viewControllerA,日志显示为we reloaded viewControllerA。我现在清除日志。再次点击此按钮(第二次)将导致viewControllerA被重新加载两次(这会导致一些重复项由于某些异步附加而显示在表中)并且日志现在显示为{{ 1}}。我再次清除日志。第三次按下按钮会导致we reloaded viewControllerA we reloaded viewControllerA重新加载三次,现在日志显示为viewControllerA
问题
如果不是很明显,问题在于,无论我按下按钮的次数多少,每次按下按钮都会导致只有一次重新加载we reloaded viewControllerA we reloaded viewControllerA we reloaded viewControllerA的tableview 。但是,第二次按下按钮会两次,第三次按三次等等 我认为原因是什么
我并不完全理解viewControllerA的基本机制,但我的猜测(这是一个直接猜测)是,每次通知都被“发布”按钮被点击,但在点击按钮之前已经存在的任何通知,另外运行到正在发布的新通知。即第一次按下按钮时,没有预先存在的通知,因此它会运行一次。 0 + 1 = 1.第二次,但是已经存在通知,因此按下按钮会调用1(前一个)+ 1(新)= 2 ...因此它会运行两次。
或许这是完全错误的,这是别的什么? 我认为解决方案可能是 如果我对问题根源的猜测是正确的,可以通过添加从NotificationCenter删除以前存在的通知来解决此问题:

NotificationCenter

问题是我不知道它的语法是什么。同样,我的假设完全有可能也是错的......在这种情况下......问题是什么以及如何解决?

0 个答案:

没有答案