快速计算总距离iOS

问题描述:

因此,在我目前的project我正在做一个计算驾驶摩托车时节省的排放量与一般汽车相比的方法。该功能包含两部分,method(计算)和tracker function。主要问题是跟踪器功能似乎根本没有跟踪快速计算总距离iOS

我的主要问题是,如何在应用程序启动时获取跟踪器功能总是跟踪?

这是跟踪功能

var startLocation:CLLocation! 
var lastLocation: CLLocation! 
var traveledDistance:Double = 0 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    if startLocation == nil { 
     startLocation = locations.first 
    } else { 
     if let lastLocation = locations.last { 
      let distance = startLocation.distanceFromLocation(lastLocation) 
      let lastDistance = lastLocation.distanceFromLocation(lastLocation) 
      traveledDistance += lastDistance 
      print("\(startLocation)") 
      print("\(lastLocation)") 
      print("FULL DISTANCE: \(traveledDistance)") 
      print("STRAIGHT DISTANCE: \(distance)") 
      var travelDistance = setData("distance") 
     } 
    } 
    lastLocation = locations.last 
} 

这是方法

func calculateEmission(numbers: Int...) -> Double{ 
    let recordedDistance = getData("distance") 

    let dis = recordedDistance 
    let emissionAve = 0.16 

    let calculatedEmission : Double = Double(dis) * Double(emissionAve) 

    print(calculatedEmission, "kg Co2") 
    return calculatedEmission 
} 
+0

是什么让你相信这个方法应该被调用?你是否在某处创建了一个'CLLocationManager',你是否将它设置为包含此方法的类的实例? – Jonah

+0

这个问题还是很模糊的。请准确了解您要查找的信息。 – Sethmr

+0

您是否得到提示授予位置服务访问权限? – MwcsMac

确保您已经于您的info.plist以下。然后您应该被提示允许访问位置服务。

<key>NSLocationAlwaysUsageDescription</key> 
<string>Needs access to access GPS</string> 
<key>NSLocationUsageDescription</key> 
<string>Needs access to access GPS</string> 
<key>NSLocationWhenInUseUsageDescription</key> 
<string>Needs access to access GPS</string> 

你应该在viewDidLoad中有这样的东西。

override func viewDidLoad() { 
    self.locationManager.requestWhenInUseAuthorization() 
     if CLLocationManager.locationServicesEnabled() { 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
      locationManager.startUpdatingLocation() 
     } 
    } 
+0

因此,我试图按照你的建议去做,它似乎工作到目前为止,但是当我得到“需要访问GPS”消息时,它甚至在我点击'允许按钮'之前就消失了。我还在控制台中收到以下消息**“试图在不提示位置授权的情况下启动MapKit位置更新,必须首先调用 - [CLLocationManager requestWhenInUseAuthorization]或 - [CLLocationManager requestAlwaysAuthorization]。”** @MwcsMac – Victor

+0

您尝试使用哪种设备上?控制台消息是预料之中的,因为你不能全部访问,因为无法访问允许。 – MwcsMac

+0

它可以在所有模拟手机上正常工作,但在手机(iPhone 6)上试用时只会出现此错误。 – Victor