2016-12-14 10 views
0

ロケーションマネージャを使用していくつか問題があります。 locationManager.requestWhenInUseAuthはアプリフローを停止せず、ユーザーがauth alertを却下する前にstartUpdatingLocationが呼び出されたようです。 これを避ける方法は?CLLocationManagerはユーザ認証の前にアップデートを開始します。Swift

私のアプリは利用できないGPSのデフォルト値を読み込むので、私はいつもデフォルトを取得しています(この機能は「このアプリを認証しますか?」という警告がまだ表示されているためです)。

マイコード:

if ask{ 
     locationManager.requestWhenInUseAuthorization() 
     self.manageLocation() 
    } 

func manageLocation(){ 
    if CLLocationManager.locationServicesEnabled() { 

     switch(CLLocationManager.authorizationStatus()) { 

     case .notDetermined, .restricted, .denied: 
      // load default deck 
      self.loadBlink(useDefault: true) 

     case .authorizedAlways, .authorizedWhenInUse: 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
      locationManager.distanceFilter = 10.0 
      locationManager.startUpdatingLocation() 

     } 
    } else { 
     // load default deck 
     self.loadBlink(useDefault: true) 
    } 
} 
+0

場所のアクセス認証とアプリケーションの代理人のstartUpdatingLocationのコードを入れていますか? –

+0

以前に許可を既に与えている場合は、ロケーションマネージャが場所の更新を開始します。 –

+0

いいえ、どうですか? @HimanshuMoradiya –

答えて

-1

<key>NSLocationAlwaysUsageDescription</key> 
<string>$(PRODUCT_NAME) would like to use your location.</string> 
<key>NSLocationWhenInUseUsageDescription</key> 
<string>$(PRODUCT_NAME) would like to use your location.</string> 

var locationManagerを設定し、あなたののInfo.plistにこれを追加します。

viewDidLoadコールこの上

var locationManager:CLLocationManager! 

locationManager = [[CLLocationManager alloc] init]; // objective-c 
locationManager = CLLocationManager() // swift (if i'm not wrong) 

呼び出しは非同期で、このrequestWhenInUseAuthあなたが呼び出す前startUpdatingLocation

+0

すでに完了! @Hezron –

+0

あなたのアプリをアンインストールしてから再インストールしてみてください。 – Hezron

+0

私はまだ何もしませんでした@Hezron –

0

許可を要求。それはすぐに戻ってくるので、それを考慮する必要があります。

+0

どういう意味ですか? @Andreas –

+0

https://en.wikipedia.org/wiki/Asynchronous_method_invocationユーザーが質問に答えたときにコールバックを取得することを意味します。ユーザーを待つだけではスレッドをブロックしません。 – Andreas