Swift 停止从其他视图控制器更新位置
我已经实现了一个代码,它开始更新用户位置,然后呈现一个不同的视图Swift 停止从其他视图控制器更新位置,swift,xcode,location,locationmanager,Swift,Xcode,Location,Locationmanager,我已经实现了一个代码,它开始更新用户位置,然后呈现一个不同的视图 self.manager.startUpdatingLocation(间隔:4) self.present(viewController,动画:true,完成:nil) 当我试图停止更新位置时,我的应用程序仍在打印坐标 是否有代码从整个应用程序中禁用位置管理器?然后,如果我想重新开始,我想使用相同的代码行 我尝试过的事情: func stopLocation (){ DispatchQueue.main.async {
self.manager.startUpdatingLocation(间隔:4)
self.present(viewController,动画:true,完成:nil)
当我试图停止更新位置时,我的应用程序仍在打印坐标
是否有代码从整个应用程序中禁用位置管理器?然后,如果我想重新开始,我想使用相同的代码行
我尝试过的事情:
func stopLocation (){
DispatchQueue.main.async {
self.locationManager.stopUpdatingLocation()
self.manager.stopUpdatingLocation()
}
}
self.manager.stopUpdatengLocation()
您的问题是,您正在为每个视图控制器创建不同的manager/location manager副本。您需要一个两个视图控制器都可以对话的对象来控制应用程序对位置管理器的使用
这是单例设计模式的一个很好的用例。将Manager类设置为单实例,然后使用该实例管理location Manager状态
该呼叫可能如下所示:
Manager.shared.stopUpdatingLocation()
你应该能够用谷歌搜索“Swift单例模式”“去了解它。在线上有几十个代码示例。请确保您没有创建多个manager实例。我确实在第二个视图中创建了实例。如果我不这样做,它将显示一个错误
foundnil
为启动和停止的两个功能创建一个类。。只需在ViewDiLoad或ViewDiDisplay中调用所需的任何视图控制器,并确保在ViewDidInvisiseIt中停止它,它已经是一个在后台模式下更新位置的库。有可能从中生成一个单例吗?可能是这样的,尽管浏览一下它,它被设置为通知单个代理有关位置更新的信息。您可能希望它通知当前的前视图控制器,因此您可能需要更改代理。可能需要一些重构才能做到这一点。谢谢。我正在努力处理代理以及如何设置它。如果你能帮助我解决这个问题,这取决于APScheduledLocationManager
框架是如何编写的,我没有时间深入研究。看来APScheduledLocationManager
的编写目的是在其初始值设定项中接受一个委托,而不允许您更改它。您需要重构该类以使其成为可以更改委托的类,或者创建一个中间对象,作为APScheduledLocationManager
的委托,并将位置更新转发给视图控制器。或者,您可以重构APScheduledLocationManager类,以广播有关位置更新的通知管理器通知。