0

ほとんどの場合、開発者は古いキャッシュされた場所をフィルタリングする方法を尋ねていますが、私は反対のことに興味があります-古い場所を保存して取得する方法:) これが私のケースです: アプリに天気予報をダウンロードしている天気画面があります現在地の場合。アプリが起動するとすぐに、1 km の精度で標準の位置情報の更新を開始し、受信した位置情報をロケーター クラスのプライベート メンバーに保存します。アプリが場所の更新を受信しない場合は、既知の以前の場所を表示する必要があります ([CLLocationManager の場所] から取得するなど)。

問題はiPad2です。私のアプリはデバイスを再起動せずに約 1 週間実行されますが、[CLLocationManager location] は非常に頻繁に nil を返します。たとえば、昨日 iPad で Google マップ アプリを開いたところ、「場所を特定できません」というメッセージが表示されたため、アプリで [CLLocationManager location] が nil を返しました。次に、Googleマップアプリで場所の矢印アイコンを押すと、Googleマップアプリに現在の場所が表示されました. また、[CLLocationManager location] はアプリ内の場所を返しました。ただし、同じ問題が今日も続いています - [CLLocationManager location] は再び nil を返します。そのため、CLLocationManager はしばらくするとロケーション キャッシュを破棄し、デバイスと一緒に移動していない場合、既知の以前のロケーションは取得されないと思います。これを回避し、CLLocationManager が nil の場合に任意の場所を取得するように強制する方法はありますか?

4

1 に答える 1

0

ドキュメンテーション

最近取得したユーザーの場所。(読み取り専用)

@property(readonly, nonatomic) CLLocation *場所

討論

位置データが取得されていない場合、このプロパティの値は nil です。

iOS 4.0 以降では、このプロパティには、起動時に最新の場所オブジェクトが含まれる場合があります。具体的には、重要な場所の更新が実行されているときにアプリケーションが終了した場合、このプロパティは、アプリケーションが再起動された (そして新しい場所マネージャー オブジェクトを作成した) ときに最新の場所データで更新されます。この位置データは、アプリケーションによって処理された最後の位置イベントよりも新しい場合があります。

このプロパティに保存されている場所のタイムスタンプを確認することを常にお勧めします。レシーバーが現在位置データを収集しているが、最小距離フィルターが大きい場合、返される位置は比較的古いものである可能性があります。そうである場合は、レシーバーを停止してから再度開始して、強制的に更新することができます。

可能な限り長くキャッシュに保存され、タイムアウトはありません。位置情報サービスを使用した何かが位置情報を取得できなかった場合は、nil に設定されることがあります。

于 2012-12-11T15:11:12.367 に答える