Swift IOS 弹出后将视图控制器 运行 保留在后台

Swift IOS keep view controller running in background after pop

我的应用包含两个视图。第一个是 GMSMapView,第二个用于连接到发送坐标的蓝牙设备。

连接蓝牙设备后,我使用委托将信息发送回地图视图并四处移动标记。为了 运行 我之前使用的是 segues 视图之间的转换,这并没有停止蓝牙视图控制器,并且数据按照我希望的方式进入地图视图。

我 运行 遇到重新启动地图视图的问题,所以我决定使用导航控制器。现在我使用 push segue 进入我的第二个视图,然后使用 pop 返回到第一个视图的相同实例。太好了,成功了!我现在遇到的问题是弹出第二个视图似乎像以前一样在后台完全停止 运行 。有没有办法像以前一样将它 运行 保留在后台?

我目前用来弹出第二个视图的是

self.navigationController?.popViewControllerAnimated(true)

如有任何想法,我们将不胜感激!谢谢!

弹出视图控制器不会"stop running"。还给你,你不留着,就彻底销毁了

如果您不希望发生这种情况,请在归还时保留它。您目前正在忽略返回的视图控制器:

 self.navigationController?.popViewControllerAnimated(true)

相反,保留对它的引用:

self.mySecondViewController = 
    self.navigationController?.popViewControllerAnimated(true)

但是请注意,这是一个非常不寻常的架构。您将无法使用故事板 segue 再次推送,因为它会推送不同的副本。最好完全放弃您的导航控制器架构,因为它完全不适合弹出后视图控制器持久存在的想法。如果您想要一个两个视图控制器同时存在的架构,您最好使用 UITabBarController — 或者,更好的是,完全 重新组织您的应用程序。您需要视图控制器在弹出后保持不变的概念是 "bad smell":这意味着您将功能放在了错误的位置。将功能放在确实持续存在的地方,而不是强制视图控制器以某种人为的方式持续存在。