Swift,NSObject中的CLLocationManagerDelegate不起作用

时间:2015-02-09 22:55:18

标签: swift cllocationmanager

我在使用CLLocationDelegate获取位置时遇到问题。 我创建了UIView的新子类并且运行良好,但是当我创建NSObject的子类时,没有调用CLLocationDelegate。我可以找到问题所在。 这是我的代码:

import UIKit
import CoreLocation

class LocationData: NSObject, CLLocationManagerDelegate {

var locationManager : CLLocationManager = CLLocationManager()

override init() {
    super.init()
    if self.locationManager.respondsToSelector(Selector("requestAlwaysAuthorization")) {
        self.locationManager.requestWhenInUseAuthorization()
    }
    self.locationManager.delegate = self
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    self.locationManager.distanceFilter = 50
    self.locationManager.startUpdatingLocation()
    println("init LocationData")
}

    func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    println(error.description)
    }

    func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) {
    println("updated")
    }
}

谢谢!

1 个答案:

答案 0 :(得分:2)

你的代码很好!但是在实例化类时,你需要这样做:

 import UIKit

 class ViewController: UIViewController {

 let LocationData: LocationData = LocationData()  //<- here is the secret to works!!!

 override func viewDidLoad() {
      super.viewDidLoad()
}

我还建议您将init更改为以下内容:

override init() {
    super.init()

    let authorizationStatus: CLAuthorizationStatus = CLLocationManager.authorizationStatus()

    if authorizationStatus == .notDetermined {
        locationManager.requestWhenInUseAuthorization()
    }

    self.locationManager.delegate = self
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    self.locationManager.distanceFilter = 50
    self.locationManager.startUpdatingLocation()
    print("init LocationData")
}

不要忘记在NSLocationWhenInUseUsageDescription项目中添加info.plist