从导航堆栈弹出的视图控制器似乎仍然存在于后面

时间:2017-06-13 09:52:38

标签: ios swift3 uiviewcontroller uinavigationcontroller xcode8

我的项目中有三个不同的视图控制器,都有自己重写的viewWillAppear函数,print语句用于标识应用程序运行时调用哪个视图控制器的函数。这些控制器都在导航控制器下,为简单起见,我将它们称为视图控制器A,B和C.

但问题是,当我从View Controller A导航到View Controller B和C时,请使用" back"导航栏上的按钮返回到viewController A,看起来像viewControllers B和C并没有完全被解雇。我使用self.navigationController.viewControllers.count检查了导航堆栈计数,它正确地返回count = 1(意味着堆栈上唯一的视图控制器是A),但如果我最小化应用程序并将其恢复到再次出现前景,B和C视图控制器仍在调用viewWillAppear函数,即使它们应该已经从堆栈中弹出。此外,如果我多次在A和B之间往返,保持在A,然后最小化应用程序并再次打开它,viewWillAppear方法也将被多次调用,出现次数等于多次我在两个控制器之间移动。

注意:我正在使用NotificationCenter Observer告诉控制器在应用程序进入前台或进入后台时调用viewWillAppear / viewDidDisappear。

以下是我使用观察者的方式:

override func viewWillAppear(_ animated: Bool) {
    NSLog("View Controller A: viewWillAppear called")
    /*
    Some code here
    */
}

func willEnterForeground(){
    viewWillAppear(false)
}

NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: .UIApplicationWillEnterForeground, object: nil)

对于文字墙感到抱歉,我不知道如何更好地描述这个问题。这似乎是一个有点普遍的问题,所以我没有发布任何代码。如果有人对这里的问题有任何疑问,或者希望我发布更多代码,请告诉我。

谢谢!

更新:已解决。对于任何偶然发现此问题且碰巧看到这篇文章的人,我在下面的评论部分留下了我的解决方案。

0 个答案:

没有答案