Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
Swift IOS在pop后让view controller在后台运行_Ios_Swift_Uiview_Viewcontroller_Navigationcontroller - Fatal编程技术网

Swift IOS在pop后让view controller在后台运行

Swift IOS在pop后让view controller在后台运行,ios,swift,uiview,viewcontroller,navigationcontroller,Ios,Swift,Uiview,Viewcontroller,Navigationcontroller,我的应用程序由两个视图组成。第一个是GMSMapView,第二个用于连接到发送坐标的蓝牙设备 连接蓝牙设备后,我使用代理将信息发送回地图视图,并移动标记。为了在视图之间转换,我以前使用segues,这并没有停止Bluetooth视图控制器,数据按照我希望的方式进入地图视图 我遇到了重新初始化地图视图的问题,所以我决定使用导航控制器。现在,我使用一个推送序列进入第二个视图,然后弹出以返回到第一个视图的同一个实例。太好了,成功了!我现在的问题是,弹出第二个视图似乎会完全阻止它像以前一样在后台运行。有

我的应用程序由两个视图组成。第一个是GMSMapView,第二个用于连接到发送坐标的蓝牙设备

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

我遇到了重新初始化地图视图的问题,所以我决定使用导航控制器。现在,我使用一个推送序列进入第二个视图,然后弹出以返回到第一个视图的同一个实例。太好了,成功了!我现在的问题是,弹出第二个视图似乎会完全阻止它像以前一样在后台运行。有没有办法让它像以前一样在后台运行

我现在用来弹出第二个视图的是

self.navigationController?.popViewControllerAnimated(true)

任何想法都将不胜感激!谢谢

弹出的视图控制器不会停止运行。它会被归还给你,如果你不保留它,它就会被完全摧毁

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

 self.navigationController?.popViewControllerAnimated(true)
相反,保留对它的引用:

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

但是,请注意,这是一个非常不寻常的架构。您将无法使用情节提要序列再次推送,因为它将推送不同的副本。最好完全放弃导航控制器体系结构,因为它完全不适合视图控制器在弹出后持久化的想法。如果你想要一个两个视图控制器同时存在的架构,你最好使用UITabBarController——或者,更好的是,完全重新组织你的应用程序。弹出视图控制器后需要将其持久化的想法是一种不好的感觉:这意味着您将功能放在了错误的位置。将功能放在一个确实存在的位置,而不是强制视图控制器以某种人为方式存在。

弹出的视图控制器不会停止运行。它会被归还给你,如果你不保留它,它就会被完全摧毁

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

 self.navigationController?.popViewControllerAnimated(true)
相反,保留对它的引用:

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

但是,请注意,这是一个非常不寻常的架构。您将无法使用情节提要序列再次推送,因为它将推送不同的副本。最好完全放弃导航控制器体系结构,因为它完全不适合视图控制器在弹出后持久化的想法。如果你想要一个两个视图控制器同时存在的架构,你最好使用UITabBarController——或者,更好的是,完全重新组织你的应用程序。弹出视图控制器后需要将其持久化的想法是一种不好的感觉:这意味着您将功能放在了错误的位置。将功能放在一个可以持久化的位置,而不是强制视图控制器以某种人为方式持久化。

是否有任何方法可以在不破坏视图控制器的情况下进行相同的转换?意思是,有没有一种方法可以在保留第一个视图实例的同时从第一个视图转换到第二个视图,然后再转换回来?是的,我已经给出了一个答案,告诉你它是什么-但我也警告过你,这是一个坏主意,表明你的应用程序架构可能是错误的。而且,看起来你正在使用的是Swift 2.x。那个版本的Swift现在已经正式过时了。您需要更新。感谢您的输入。Swift版本与您正在运行的xCode版本相关,对吗?目前在我工作的地方只有一台非常旧的MacBook air,所以我必须看看它是否能让jumpXcode 8.3只在Sierra下运行,唉。但Xcode 8.2将允许您更新到Swift 3,并将在El Capitan上运行。对您的代码的冲击——Swift 2和Swift 3之间的差异——将是非常显著和深远的,因此您越早进行此转换越好。有没有办法在不破坏视图控制器的情况下进行相同的转换?意思是,有没有一种方法可以在保留第一个视图实例的同时从第一个视图转换到第二个视图,然后再转换回来?是的,我已经给出了一个答案,告诉你它是什么-但我也警告过你,这是一个坏主意,表明你的应用程序架构可能是错误的。而且,看起来你正在使用的是Swift 2.x。那个版本的Swift现在已经正式过时了。您需要更新。感谢您的输入。Swift版本与您正在运行的xCode版本相关,对吗?目前我工作的地方只有一台非常旧的MacBook air,所以我得看看它是否能做成JumpxCD
唉,e 8.3将只在塞拉山下运行。但Xcode 8.2将允许您更新到Swift 3,并将在El Capitan上运行。对你的代码的冲击-Swift 2和Swift 3之间的差异-将是非常戏剧性和深远的,因此你越早进行此转换越好。谢谢你的答案Matt,我对iOS完全陌生,所以这正是我一直在寻找的答案。我将设法找到另一种方法使我的两种观点保持一致。也许我可以将蓝牙功能移回主视图控制器,这样我就不需要同时运行第二个视图控制器。也许我可以将蓝牙功能移回主视图控制器,这样我就不需要同时运行第二个视图控制器。好主意!这正是我鼓励你尝试做的事情。我以前试过这样做,但没有成功。使用UITabBarController看起来很容易工作,但它可能没有以正确的方式使用它。不过,在使用UtiAbbarController之前,我会为正确的方法多做一点努力。谢谢谢谢你的回答,马特,我对iOS完全陌生,所以这正是我想要的答案。我将设法找到另一种方法使我的两种观点保持一致。也许我可以将蓝牙功能移回主视图控制器,这样我就不需要同时运行第二个视图控制器。也许我可以将蓝牙功能移回主视图控制器,这样我就不需要同时运行第二个视图控制器。好主意!这正是我鼓励你尝试做的事情。我以前试过这样做,但没有成功。使用UITabBarController看起来很容易工作,但它可能没有以正确的方式使用它。不过,在使用UtiAbbarController之前,我会为正确的方法多做一点努力。谢谢