位置更新无效

时间:2016-08-18 21:08:02

标签: ios swift cllocationmanager

即使用户退出视图返回上一个视图,我也会尝试进行位置更新。 为了实现这一点,我创建了一个单独的类来处理我的位置更新,但我遇到了奇怪的行为。

首先,我的授权请求只是暂时弹出而不是消失,所以我将其移回实际视图。 但是我的位置更新仍然无效。 位置图标出现在设备上,但它从不进入didLocationUpdate功能。也没有输入didFailWithError。 我对iOS很陌生,所以我不知道我做错了什么。

这是我的班级:

import CoreLocation

class RouteLocation: NSObject, CLLocationManagerDelegate{

    var locationManager:CLLocationManager!

    var databasePath = ""
    override init(){

        super.init()

        let dirPaths =
            NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
                                                .UserDomainMask, true)
        let docsDir = dirPaths[0] as NSString

        databasePath = docsDir.stringByAppendingPathComponent(
            "\\firstAscent.db")

        // For use in foreground
        locationManager =  CLLocationManager()
        locationManager.requestWhenInUseAuthorization()


       //   locationManager.requestAlwaysAuthorization()
        //  print("in location")

            if CLLocationManager.locationServicesEnabled() {
                print("System Services enabled")
                self.locationManager.delegate = self
                self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
                self.locationManager.distanceFilter = 10
                self.locationManager.startUpdatingLocation()
            }


    }
    var isLocationMising = true


    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let locValue:CLLocationCoordinate2D = manager.location!.coordinate

        let latitute = locValue.latitude
        let longitute = locValue.longitude
        print("locations = \(locValue.latitude) \(locValue.longitude)") //continues to make SQL query calls 

我从视图中调用它:_ = RouteLocation()

2 个答案:

答案 0 :(得分:1)

  1. requestWhenInUse...函数以异步方式运行。它将显示对话框,但同时继续处理其余代码。即使其他一切都正确,您的应用也不会在第一次(当获得许可时)正确运行。
  2. 您是否提供了requestWhenInUseAuthorization解释字符串?
  3. 我认为你实例化它运行init的类的方式会立即死掉。没有什么可以保留它。 因此,无法调用didUpdateLocation
  4. 如果您只需要一个位置,请致电requestLocation

答案 1 :(得分:1)

代码中的所有内容都很完美,但委托方法不正确

像这样编写委托方法

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {let latitute = locValue.latitude
    let longitute = locValue.longitude
    print("locations = \(locValue.latitude) \(locValue.longitude)")
}