Swift IOS让视图控制器在弹出后在后台运行
问题描述:
我的应用程序由两个视图组成。第一个是GMSMapView
,第二个用于连接发送坐标的蓝牙设备。Swift IOS让视图控制器在弹出后在后台运行
连接蓝牙设备后,我使用代理将信息发送回地图视图并移动标记。为了在我以前使用segues的视图之间进行切换,这并没有阻止蓝牙视图控制器,并且数据像我希望在地图视图中那样产生。
我遇到了我的地图视图被重新启动的问题,所以我决定使用导航控制器。现在我使用push segue来查看第二个视图,然后弹出回到第一个视图的同一个实例。很好,工作!我现在的问题是,弹出第二个视图似乎完全阻止它像过去那样在后台运行。有没有办法让它像以前一样在后台运行?
我目前使用弹出第二种观点是什么
self.navigationController?.popViewControllerAnimated(true)
任何想法,将不胜感激!谢谢!
答
弹出视图控制器不会“停止运行”。它被退回给你,如果你不保留它,它被完全销毁。
如果您不希望发生这种情况,请在返回时保留它。您正在忽略返回的视图控制器:
self.navigationController?.popViewControllerAnimated(true)
相反,保持对它的引用:但是
self.mySecondViewController =
self.navigationController?.popViewControllerAnimated(true)
被警告说,这是一个非常独特的建筑。您将无法再使用storyboard继续推送,因为它会推送不同的副本。最好放弃你的导航控制器架构,因为它完全不适合视图控制器在弹出之后持续存在的想法。如果你想要一个两个视图控制器同时存在的体系结构,最好使用UITabBarController - 或者,甚至更好地重新组织你的应用程序完全。您需要视图控制器在弹出后保持的概念是一种“难闻的气味”:这意味着您将功能放在了错误的地方。将功能放在一个确实保留的地方,而不是强制视图控制器以某种人为的方式持续存在。
有什么办法可以让视图控制器销毁而不会有相同的转换吗?意思是说,有没有办法从第一个视图转换到第二个视图,然后返回,同时保留第一个视图的实例? – lhbortho
是的,我已经给出了一个答案,告诉你它是什么 - 但我也告诫你,这是一个坏主意,并表明你的应用程序体系结构可能是错误的。 – matt
另外,它看起来像你使用的是Swift 2.x.该版本的Swift现在已经正式死机。你需要更新。 – matt