Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 在UITabView中切换选项卡时,防止从内存中删除覆盖的控制器_Ios_Objective C_Swift_Storyboard_Uistoryboardsegue - Fatal编程技术网

Ios 在UITabView中切换选项卡时,防止从内存中删除覆盖的控制器

Ios 在UITabView中切换选项卡时,防止从内存中删除覆盖的控制器,ios,objective-c,swift,storyboard,uistoryboardsegue,Ios,Objective C,Swift,Storyboard,Uistoryboardsegue,我有一个TabViewController。它包含一个带有NavigationItem(带有菜单项的标题栏)的MapViewController。MapViewController本身以模式显示另一个控制器(设置),该控制器也有一个NavigationItem。我的问题是: 如果显示“设置”控制器,并且其中一个切换到另一个选项卡并返回(此时“设置”控制器仍处于打开状态),则基础MapViewController将从内存中删除,因此当“设置”控制器被解除时,它将在地图控制器应位于的位置显示一个黑屏

我有一个TabViewController。它包含一个带有NavigationItem(带有菜单项的标题栏)的MapViewController。MapViewController本身以模式显示另一个控制器(设置),该控制器也有一个NavigationItem。我的问题是:

如果显示“设置”控制器,并且其中一个切换到另一个选项卡并返回(此时“设置”控制器仍处于打开状态),则基础MapViewController将从内存中删除,因此当“设置”控制器被解除时,它将在地图控制器应位于的位置显示一个黑屏。如何强制将地图控制器保留在内存中

  • 所有模态“在当前上下文中”的segue都将覆盖TabView,这不应该发生,所以它必须是模态segue

  • MapViewController上的DefinePresentationContext保留地图,是。但是,当调用设置控制器时,它会嵌入到地图视图导航项下的地图视图中,因此有2个导航栏。这显然也不能发生


    • 问题在于模态视图。当切换回时,选项卡栏显示了设置控制器,但无法从它的模态名称中得知。将地图视图控制器定义为当前上下文,并在即将到来的设置控制器的viewDidLoad中关闭显示视图控制器的导航栏。当使用setNavigationBarHidden(true,动画:true)时,它甚至有一个漂亮的外观。
      “视图将显示”是一个很好的位置,可以将其恢复到原来的位置并保持动画同步。

      您知道为什么要将其从内存中删除吗?您是否收到内存不足警告?切换视图后是否不再有对它的引用?没有内存警告(没有正在使用的应用程序,我正在iPhone 6s上测试,据我所知,这里的应用程序最多可以使用GB)。您好,我再次将引用设置为全局和静态,并多次检查它们。当返回到设置控制器时,参考仍然存在,黑屏将在其下方等待。我注意到了以下几点:当我返回到带有地图的选项卡,并且没有覆盖的设置控制器时,ViewDidDisplay会按预期执行。当我返回并打开“设置”控制器并将其关闭时,从贴图中显示的ViewDid将永远不会执行。尽管对它的引用从未被删除。这告诉了我什么?好吧,让我们尝试另一种方法:如果“保持视图不消失”很复杂,那么当我从一个选项卡切换到另一个选项卡时,会执行什么代码?我可以在视图中手动调用此设置控制器,不是吗?