0

I have written an iPhone app that uses the iPhone's relative GPS location.

I have a button in the user interface that does reverse geolocation (pulls the street name bases on the lat and long). The only problem is that the location object as retrieved by

CLLocation *location = [[self locationManager] location];

is nil if the user taps the button too soon. I am initializing the LocationManager in viewDidLoad as I don't want to object to be created unless the user actually loads this screen. I start updating the location straight away as well... but still if the user loads the screen and taps the GPS button straight away the location is nil.

Here comes the question: do you know roughly how much time the CLLocationManager needs to retrieve the location?

Thanks

4

2 に答える 2

2

電話がこのデータを取得するのに数秒かかる場合があります。使いやすさのために、ボタン コントロールを非アクティブにすることをお勧めします。NSNotification場所が見つかったら起動します。ビュー コントローラーを登録して、この通知をリッスンします。これにより、ボタン コントロールを再アクティブ化するセレクターが起動されます。

于 2009-09-06T07:18:54.630 に答える
0

位置修正の取得は、必要な精度の量に依存し、以前に何らかの位置データがあったかどうか、天気がどのようなものか、屋内にいるか屋外にいるかなど、答えは 1 つではありません。マップ アプリケーションにアクセスして [場所を特定] ボタンをクリックすると、さまざまな状況で、解決プロセスを開始してからしばらく時間がかかることに気付くでしょう。

コールバックは、データがあるときに通知します。ポーリングしたり、即時アクセスを想定したりして (さらに悪いことに、データが見つかるまでアプリをブロックして) 取得するべきではありません。ここでの重要な問題は、ボタンがリクエストを同期的に実行しており、動的ではないことです。つまり、「n」の値に関係なく、ある時点で失敗することが保証されている競合状態です。

ボタンがバックグラウンドで位置情報の取得を呼び出し、その後情報をポップアップ表示するか、フォームに入力するようにコードを変更します。

于 2009-09-06T08:08:38.110 に答える