【问题标题】:XCode: Seamlessly persist location updatesXCode:无缝保持位置更新
【发布时间】:2016-11-01 11:13:30
【问题描述】:

我正在制作一个涉及跟踪用户位置的 ios 应用程序。无论用户在哪个视图控制器中,我都希望跟踪位置。有没有办法获得这种恒定的位置跟踪效果,而不必在每次用户移动到新的视图控制器时关闭/打开位置更新?我需要某种单例吗?

【问题讨论】:

  • @boraseoksoon 停止在每一个问题中添加“提前致谢” - 问题中不应该添加致谢,而您现在已经对许多问题做到了。

标签: swift xcode core-location viewcontroller


【解决方案1】:

在其他对象类中实现 locationManager 委托,而不是在 ViewController 中。然后,在这个对象内部,创建包含位置的 var,并在所有视图控制器中使用这个 var。您可以将此对象用作单例或在控制器之间传递它。

【讨论】:

    【解决方案2】:

    有几种使用位置管理器及其代表的做法。有人说最好的方法是在应用程序委托中实现位置管理器,其他人在控制模型对象位置时在视图控制器中使用它。

    我更喜欢像 Damian Dudycz 建议的那样,为该位置使用单独的模型类。这不需要是单例。例如,您定义一个类,为您提供应用所需的所有位置特定信息。此类具有应用程序中特定位置所需的必要属性和方法。接下来,您可以在项目功能的后台启用位置更新。

    然后你可能会得到一个像这样的类:

    class myLocationClass: NSObject, CLLocationManagerDelegate {
    
        //Properties
        var myLocations = [CLLocations]()
        var myGeocodeName = ""
        var myDistanceCovered = 0.0
        var myLocationManager : CLLocationManager? //You can also make this lazy to prevent optional properties
        var ... etc.
    

    然后您可以在此类中放置相同的 CLLocation 特定方法,例如:

    func getLocationName(from location: CLLocation) {
    //Your reverse geocoding code here.
    }
    
    func locationManager(_ manager: CLLocationManager,         didUpdateLocations locations: [CLLocation]) {
    //Your location update stuff here.
    }
    

    现在,您可以从各种视图控制器调用所有公共属性和方法来开始更新位置、获取值并停止更新位置。我已经这样做了,它为我节省了维护代码的很多麻烦,因为我所有的位置代码都在一个类中。

    缺点是您的类可能会变得非常大并且难以维护。对我来说,这还没有发生。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2011-11-26
      • 2019-08-22
      • 2013-05-25
      • 2012-03-04
      相关资源
      最近更新 更多