辞退呈现视图控制器,呈现视图控制器已经发布

问题描述:

我对一些旧的代码,我没有写工作后,它真的不是很好的架构......辞退呈现视图控制器,呈现视图控制器已经发布

的情况是,一个视图控制器以模态方式呈现自定义视图控制器,但是每30秒重新呈现呈现视图控制器。

这里的问题是,如果在这种情况发生时屏幕上出现模式,那么任何消除它的努力都会导致奇怪的行为(如白屏)。

我已经尝试在新重新创建的控制器上调用[self.presentedViewController dismissViewControllerAnimated];,但presentedViewController是你想象的零。

我也试着保留对模态视图控制器的弱引用,然后当提交VC重新加载时,将此值设置为旧VC的值。这让我打电话self.customModalVC dismissViewControllerAnimated];,但这是导致上述白屏,也许是因为它提出VC不再在堆栈中?

任何和所有建议表示赞赏。

+0

为什么每30秒重新创建一次?这听起来有点奇怪。我现在也看到了保持这种模式视图呈现的方式,而不需要引用它,这可能会导致内存问题,因为您需要持有ref的viewController来保存它。所以你最好的选择听起来像重构/改变这个。 – zero3nna

+0

这是由于网络电话,我同意这是一个完全愚蠢的做法。不会是我的做法。看起来我没有其他选择,除了重构之外...... PM会喜欢去一张3d票的4小时票哈哈。 –

+0

是的,这听起来像一个有趣的机票。 – zero3nna

尝试导航控制器传递给新呈现的视图控制器:

presentedVC.navigation = self.navigationController 

这个新创建的一个添加解雇

self.dismiss(animated: false) { 
       _ = self.navigation?.popViewController(animated: true) 
      } 
+0

UIViewController的'navigationController'属性是只读的。 –

+0

此外,模态演示与导航堆栈相互排斥,因此没有“弹出”和“推送”。 –

我觉得你应该先提出视图控制器,这将是最后一次在堆栈视图层次结构上并调用dismiss在他身上,然后删除父母的控制器 how to get top controller see here

+0

我已经对提出的视图控制器有了一个参考,正如我在问题中非常清楚地说的。我叫解雇,并导致奇怪的行为。请务必彻底阅读这个问题。 –

+0

好的,对不起,从手机打开并遗漏了一些东西。无论如何,请解释一下你是什么意思'重新创建'控制器。并且为什么你在重新创建之前没有关闭显示的视图控制器,否则你的视频控制器应该知道他所提供的ViewControlle,并在关闭后出现 –

+0

好的,对不起,从手机打开并遗漏了一些东西。无论如何,请解释一下你是什么意思'重新创建'控制器。并且为什么你没有在重新创建之前关闭提交的视图控制器,否则你提交的vc应该知道他在哪个视图上显示,并且会在关闭后出现一个 –