2011-12-19 13 views
0

現在、現在の場所に基づいて近隣の広告を表示するアプリケーションを構築しています。ユーザーが最初にアプリケーションを起動すると、近くの広告のトップ10が表示されます。IOS位置検出が検出されました

時間通りに場所を取得するのに少し問題があります。私の問題は、ビューがロードされる前に現在の位置がまだフェッチされないということです。 もちろん、委任されたUpdatedLocationがありますが、これは複数回起動されます。私はそれが最も正確な場所を取得したいので、それは複数回発火すると思いますか?

私の質問です。場所が見つかるまで待ってから広告の検索を開始するにはどうすればよいですか?

ありがとうございます!

よろしく、 Mittchel

+0

位置が決定されていることを示すテキストとスピナーを表示します。ロケーションを取得したら、実際のビューを表示します。それとも、私は何かが恋しいですか? – DarkDust

+0

うん、私はそれが複数の場所を見つけるので、どのように私が必要とするもの(最後)を決定することができると述べたように? – Mittchel

答えて

1

ビューあなたが(より正確な)位置を取得するたびに更新する必要があります。したがって、最後の場所を覚えて、horizontalAccuracy/verticalAccuracyが減少しているかどうかをチェックします(より小さい=より正確ですが、負の=無効)。おそらく、新しい場所を取得するたびに更新することも、精度は変わらないかもしれないが、位置は変わるので(ユーザーは動いている)、より良いだろう。

リストを表示するだけの場合は、以前の結果を覚えておく必要があります。新しい結果を取得し、異なる場合はリストを更新します。

+0

それは私に問題を与える何か、私は毎回ビューを更新することはできません。私のViewDidLoadでは、結果をフェッチしています(そして、このようにしたいと思います)。つまり、結果を取得しようとするたびにビューを更新すれば意味します。 – Mittchel

+0

@Mittchel:十分に良い位置データが得られるまでビューをロードしないでください。 – progrmr

1

CLLocationManagerがコアロケーションシステムから更新されたヒットを取得すると、そのデリゲートのdidUpdateToLocation:fromLocation:メソッドが起動されます。その方法の中で、あなたは更新された場所を取得するときに何をしたいと思います。

新しい場所の.horizontalAccuracyプロパティを確認して、高品質の結果であることを確認することをおすすめします。最初のいくつかをチャックしたいと思うかもしれません。なぜなら、CLは新しいロケーションの最初のヒットとして最後のロケーションセッションの最後のヒットを与えるからです。

いずれにしても、これはデータを取得する方法です。

+0

私はそれを試して、感謝します。しかし、それが最後の更新された場所であることはどうすればわかりますか? – Mittchel

+0

@ミッチェル:最後に更新された場所はありません。正確さや場所の変更がいつでも永遠に更新できます。それが十分であれば、 'stopUpdatingLocation'を呼び出し、あなたが持っているものを使いましょう。 – progrmr

1

1つの場所はありません。CLから一連の場所を取得し、1つはキャッシュされ、その後は1秒から10分のいずれかになり、精度が向上します(精度が悪くなります)。

CLは、キャッシュされた場所を指定することから開始されます。あまり古くない場合(< 60秒)、妥当な精度でキャッシュされた場所を使用すると、断食された結果になります。さもなければ十分に良い精度を待たなければなりません(十分なものを決める必要があります、.horizontalAccuracyを見てください)。

viewDidLoadが呼び出される前に場所を持っていることを主張すると(viewWillAppearはより良い場所になります)、十分な場所が確保されるまで、viewControllerを押さなくてはなりません。どのようにするかは、そのView Controllerがどのようにロードされているかによって異なります。

0

ここに私がすることがあります。ビューをロードし、viewDidAppearでメソッドを呼び出して場所を更新します。私はと呼ばれるgithub上で素晴らしいオープンソースプロジェクトを使用しています。作業が終了すると、画面上にさまざまな進捗インジケータが表示されます(これにより、ユーザーはあなたの視界から離れないようになります)。また、アプリが停止しておらず、動作していることをユーザーに視覚的にフィードバックします。

精度の問題を解決する必要がありますが、進捗状況ビューでは、ビューを読み込んで必要なものを引き込んだりしておくことができます。そしてあなたのUIの流体を維持します。

関連する問題