【问题标题】:Calculate total distance swift iOS计算总距离swift iOS
【发布时间】:2016-12-24 15:52:28
【问题描述】:

因此,在我目前的project 中,我正在做一种计算与普通汽车相比驾驶轻便摩托车时节省的排放量的方法。该函数包含两部分,method(计算)和tracker function。主要问题是跟踪器功能以某种方式似乎根本不跟踪

我的主要问题是,如何让跟踪器功能在应用打开时始终跟踪?

这是追踪功能

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
}

【问题讨论】:

  • 是什么让你相信应该调用这个方法?您是否在某处创建了 CLLocationManager,是否将其设置为 delegate 为包含此方法的任何类的实例?
  • 这个问题还是很模糊的。请准确说明您要查找的信息。
  • 是否提示您授予位置服务访问权限?
  • @Sethmr 对不起!写这个问题时有点分心,但我的问题是“如何让跟踪器功能在应用程序打开时始终跟踪”?
  • @MwcsMac 我会看看是否能解决问题。如果不是,可能是因为我真的不知道在哪里/何时调用跟踪器函数。

标签: swift function methods distance tracking


【解决方案1】:

确保您的 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()
        }
    }

【讨论】:

  • 所以我尝试按照您的建议进行操作,到目前为止它似乎有效,但是当我收到“需要访问 GPS”消息时,它在我点击 allow button 之前就消失了。而且我还在控制台中收到以下消息 “尝试在不提示位置授权的情况下启动 MapKit 位置更新。必须首先调用 -[CLLocationManager requestWhenInUseAuthorization] 或 -[CLLocationManager requestAlwaysAuthorization]。” @MwcsMac
  • 你在什么设备上试用这个?控制台消息是意料之中的,因为您没有全部访问,因为无法点击允许。
  • 它在所有模拟手机上都能完美运行,但我只在我的手机(iPhone 6)上尝试时出现此错误。
猜你喜欢
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多