2016-07-17 9 views
-1

を変更したとき、私はシングルトン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() 

それは素晴らしい作品とユーザが移動するたびに呼び出されます。

何が問題になりますか?ありがとうございました!

答えて

1

アップルドキュメント

によれば、現在位置フィックスを戻した後、受信機は、ユーザの位置の著しい変化が が検出された場合にのみ更新 イベントを生成します。 イベントを生成するためにdistanceFilterプロパティ の値に依存しません。デバイスは、その前の通知から500メートル 以上を移動すると

そして

アプリは、すぐに通知を期待することができます。 5分ごとに1回よりも多くの通知が であるとは限りません。 デバイスがネットワークからデータを取得することが可能である場合には、ロケーションマネージャ は、私は、ユーザーが10メートルで、その場所を変更したとき、あなたがイベントを期待していると思いますタイムリーに

はるかに通知を配信する可能性がありますこのメソッドはdistanceFilterに依存しません。誰でもstartUpdatingLocation()を使用すると、distanceFilterプロパティに依存するイベントが発生します。

この詳細についてはhereをご覧ください。

関連する問題