ändert aufgerufen wird Ich versuche, Benutzer erhebliche Standortänderungen zu überwachen, um eine Singleton mit Location LocationService
genannt, geht es wie folgt aus:„didUpdateLocations“ nicht, wenn signifikante Überwachung Standort
LocationService.Swift:
class var sharedInstance: LocationService {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: LocationService? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = LocationService()
}
return Static.instance!
}
var locationManager: CLLocationManager?
var location: CLLocation?
var delegate: LocationServiceDelegate?
override init() {
super.init()
self.locationManager = CLLocationManager()
guard let locationManager = self.locationManager else {
return
}
if CLLocationManager.authorizationStatus() == .NotDetermined {
locationManager.requestAlwaysAuthorization()
}
locationManager.delegate = self
locationManager.distanceFilter = 10
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.pausesLocationUpdatesAutomatically = false
if NSString(string: UIDevice.currentDevice().systemName).floatValue >= 9 {
locationManager.allowsBackgroundLocationUpdates = true
}
}
func startUpdatingLocation() {
print("Starting Location Updates")
self.locationManager?.startUpdatingLocation()
}
func startMonitoringSignificantLocationChanges() {
print("Starting Significant Location Updates")
self.locationManager?.startMonitoringSignificantLocationChanges()
}
// CLLocationManagerDelegate
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else {
return
}
// singleton for get last location
self.location = location
}
myVC.swift:
private let locationService = LocationService.sharedInstance
func prepareInformation() {
self.locationService.delegate = self
self.locationService.startMonitoringSignificantLocationChanges()
}
aber didUpdateLocations
wird nur einmal aufgerufen, wenn die App gestartet wird, und dann wird es nicht einmal aufgerufen. Aber wenn ich schalten Sie die Zeile:
self.locationService.startMonitoringSignificantLocationChanges()
zu:
self.locationService.startUpdatingLocation()
es funktioniert super und jedesmal, wenn der Benutzer bewegt genannt.
Was kann das Problem sein? Vielen Dank!