2016-04-15 7 views
0

CLLocationManagerを使用してユーザーの現在地を取得しています。ユーザーがいる場所に気象データを表示するためにOpen Weather Apiを使用しているため、ユーザーの現在地が必要です。私の問題は、私が最初にアプリケーションを開くときに、緯度と経度の値が0、0であるということです。しかし、私は再びアプリケーションを実行するとうまくいきます。したがって、アプリの最初の起動時にのみ、間違った緯度と経度の値が使用されます。私は私が私が間違っているのかわからないLatidudeとLongitudeはアプリが初めて起動されたときに間違っています。ios

locationManager = [[CLLocationManager alloc] init]; 
[locationManager requestAlwaysAuthorization]; 
locationManager.delegate = self; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
    [self->locationManager requestWhenInUseAuthorization]; 

[locationManager startUpdatingLocation]; 

...ここにコードされ、のviewDidLoadにすべての私のセットを行います。 App Delegateの代わりにView ControllerでLatとLongを取得することとは何か?ここで

は、私は位置の値を取得しています方法です:あなたが負の値のためCLLocationオブジェクトのhorizontalAccuracyを確認する必要がありますし、そのような場合には緯度/経度値を使用しないでください

locationManager.location.coordinate.latitude 
locationManager.location.coordinate.longitude 
+0

コードには、ロケーション値の取得方法と処理方法が示されていません。私はあなたもこれを共有することをお勧めします。また、それはシミュレータか実デバイスですか? –

+0

そのコードをすぐに投稿できます。私は実際のデバイスを使用しています。このエラーはシミュレータとデバイスの両方で発生します。 –

+0

あなたは、これらの2つの行は、同じブロック/メソッド内の前のコード行に従っていると言っていますか? –

答えて

1

アプリを初めて起動したとき場所マネージャが現在の場所にアクセスするためのユーザー権限を要求し、ユーザーが許すときので、それが起こっている - それは、現在の位置を取得する過程で少し時間がかかりますし、あなたが完了する前に座標にアクセスしていますそのプロセス。

アプリをもう一度起動する位置管理者は、あなたが既に許可を与えていることを検出し、現在の位置座標を非常に素早く提供します。

解決方法は次のとおりです。 - 場所の更新が完了するまで待つ必要があります。この場合には、あなたがAppDelegateでこのプロセスを実装する必要があり、didFinishLaunchingにあなたのコードを使用する - あなたは、いくつかを置くことができますちょっとを派遣OR場所マネージャのデリゲートメソッドを使用することができますdidUpdateUserLocationをしたりのUIViewControllerは、最初のビューコントローラではない場合を使用してそこに遅らせますなので、View Controller(使用しているナビゲーションフロー)を開くと、その間にロケーションの詳細が原因でロケーションマネージャがあなたのロケーションを追跡します。

お手数ですがお手伝いします!

+0

それは私のために働いてくれてありがとう。私がしたことはNSUserDefaultsにありました。ユーザがアプリケーションを初めて起動したかどうかを確認し、真であればブール値を設定しました。ビューコントローラーでブール値をチェックし、trueの場合は5秒後にhttpリクエストを実行するためにディスパッチを使用しました。 –

0

。緯度/経度の値が0/0であることがわかると、GPSは位置ロックを確保していない可能性が高くなります。

+0

水平精度は65です。どうすればよいですか?補完ハンドラを追加し、緯度と経度を取得したら天気のみを表示する必要がありますか? –

+0

天気予報の精度をチェックし、GPSの水平精度と比較する必要があります。 – adib