2012-07-27 11 views
10

私は、ユーザがログインするたびに、および他のいくつかの場所で現在の場所を呼び出しています。 私がそうするときはいつでも、ユーザーからの許可を求める警告表示が1秒ほど表示され、消えてしまいます。 そして明らかに、私は場所を取得しません。これは私が場所を尋ねるたびに起こります。 ユーザーは[キャンセル]または[OK]をクリックできません。 助けてくださいCLLocationManagerアラート自体が却下される

+1

は自身で解決しました。 :) –

+0

私もこの問題に遭遇し、なぜ理解できないようです! – tagyro

答えて

14

あなたがlocationManagerを保持していなかった可能性があります。その結果、[CLLocationManager startUpdatingLocation]が呼び出されましたが、アラートは表示されましたが、locationManagerが解放されるとすぐに消えます。私が私のlocationMangerインスタンスのために作成したプロパティにstrongの代わりにassignをタイプしたのは、かつて私に起こりました。

+0

なぜ私はそれを考えなかったのですか?ありがとう。 – DCMaxxx

+0

@NikitaPこれは答えとしてマークする必要があります。 –

0

同じ問題が私のプロジェクトに直面しています(迅速なlang)。

これを試してください。CLLocationmanage変数をグローバル変数として宣言し、必要な場所で呼び出します。

例:

var locManager = CLLocationManager() 

    override func viewDidLoad() 
    { 


    super.viewDidLoad() 

let iOS7 = floor(NSFoundationVersionNumber) <= floor(NSFoundationVersionNumber_iOS_7_1) 

let iOS8 = floor(NSFoundationVersionNumber) > floor(NSFoundationVersionNumber_iOS_7_1) 

      locManager.delegate = self 
      locManager.desiredAccuracy = kCLLocationAccuracyBest 
      if(iOS8) 
      { 
       locManager.requestAlwaysAuthorization()// only support ios 8.0 
      } 

    } 
0

がstartUpdatingLocation後デリゲートsetterメソッドを移動するようにしてください。わたしにはできる。 例:

CLLocationManager *m = [[CLLocationManager alloc] init]; 
[m startUpdatingLocation]; 
m.delegate = self; 

OPZ、私の下手な英語。

0

私は彼の投稿にコメントできませんので、私はここで答えています。

ジャンルルカトランデーンは正しいです。私の場合、私はCLLocationManagerを保持していました。 BUT:AlertViewが表示された直後に最初のコールバックを起動し、デリゲートにステータスが未定であることを伝えます。コールバックが受信されたときにインスタンスを解放するのは間違いでした。

このメソッドは、今のように見え、それがどのような作品です:

-(void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
switch (status) { 
    case kCLAuthorizationStatusNotDetermined: 
     break; 
    default: 
     _locationManagerForAuthorizationRequest.delegate = nil; 
     self.locationManagerForAuthorizationRequest = nil; 
} 

}

関連する問題