2015-02-09 102 views
3

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

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") 
    } 
} 

谢谢!

+0

你看过http://stackoverflow.com/questions/24062509/location-services-not-working-in-ios-8? – Anna 2015-03-19 13:00:19

回答

0

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

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") 
} 

而且不要忘了在添加NSLocationWhenInUseUsageDescriptioninfo.plist项目。