を変更したとき、私はシングルトンlocationManagerを使用して、ユーザーの重要な場所の変更を監視しようとしている「didUpdateLocations」と呼ばれていませんがLocationService
と呼ばれ、それはそのように書きます:重要な位置を監視する
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()
}
しかし、didUpdateLocations
は、アプリが起動されたときにちょうど呼び出されてから呼び出されていない。
self.locationService.startMonitoringSignificantLocationChanges()
::私はラインを切り替える際しかし
self.locationService.startUpdatingLocation()
それは素晴らしい作品とユーザが移動するたびに呼び出されます。
何が問題になりますか?ありがとうございました!