2011-08-26 5 views
12

ロードマップ領域を試していて、MKMapViewデリゲートメソッドが2回目以降のロードで呼び出されていません。デリゲートメソッドのどれもMKMapViewキャッシュをクリアするには?

- (void)mapViewWillStartLoadingMap:(MKMapView *)mapView; 
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView; 
- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error; 

と呼ばれることはありません。唯一のメソッドは、

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated; 
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated; 

です。ios4はmapviewタイルイメージをキャッシュしているようです。

これらの行は、MKMapViewDelegate Protocol Referenceのドキュメントにあります。ハイライトされた行が私の問題です。

このメソッドは、現在のリクエストに関連付けられたマップタイルがロードされたときに呼び出されます。 新しい可視領域がスクロールされ、タイルが利用可能でない場合、マップタイルが要求されます。マップタイルは、現在表示されていないマップの部分に対しても要求されることがあります。例えば、地図ビューは、ユーザが小さなパンを取り扱うために必要なときに現在可視領域を囲むタイルをロードすることができる。

マップがロードされた後に、上記のデリゲートメソッドのどれも呼ばれていないので、特定の操作を実行する必要があります。誰もがキャッシュをクリアするか、これに対する代替ソリューションを提供する修正を提案することはできますか?私はすでにherethisと記載されている方法を使ってみましたが、私はまだコードを動作させることができませんでした。

+0

これらのデリゲートメソッドを使用して達成しようとしているものは何ですか? – AlexB

+0

didFinishLoadingMapにmapのスクリーングラブが必要です。このデリゲートメソッドは、didfinishとfailLoad delegateのどちらも呼び出さないタイルをキャッシングした後に、一度呼び出されます。私は今どうすればいい? –

+0

私はこれに関連するApple Bug#13774496を提出し、iOS6に問題が存在することを示すサンプルアプリケーションを作成しました:https://github.com/iwasrobbed/MapKitDelegateBug – iwasrobbed

答えて

3

私はあなたがこのようなカップルwillStartLoadingMapdidFinishLoadingMapregionDidChange、ことができると思います:willStartLoadingMap

  • がtrueにloadingフラグを設定します。
  • didFinishLoadingMapに設定します。flagをfalseに設定し、画面をキャプチャするメソッドがキューに登録されているかどうかを確認します。もしそうなら、それを呼び出してください。
  • regionDidChangeに設定してください。loadingフラグを確認し、falseに設定されている場合は、画面をキャプチャするメソッドを呼び出します。それ以外の場合は、マップのロードが完了したときに実行されるようにキューに入れます。

この方法では、タイルがロードされた後に画面をキャプチャすることができます。

ただし、regionDidChangeが何度も呼び出される可能性があるので、地図ビューが大きく変更されたときにのみ画面を取得するようにしてください(前の地図地域/中心と現在の地図地域/中心を比較できます)。

+0

ありがとうalexb。私はあなたが示唆したステップと一緒に小さなパッチを追加し、トリックをしました。 –

+0

これはインターネット接続が失われたシナリオでは機能しないため、タイルを追加できません。それは依然として、地図が完全にロードされたというデリゲートを呼び出します。 Apple側のバグのようだ。 – iwasrobbed

2

私は新しいプロジェクトを作成し、そのビューコントローラにデリゲートを接続しました。問題の3つの最初の2つのメソッドが呼び出されます。すべてのタイルをロードするので、エラーデリゲートメソッドは呼び出されませんでした。

私は最近、同様の問題を抱えています。私はMKMapViewをサブクラス化し、私のカスタムinitメソッドとawakeFromNib:の代理人を設定することを忘れてしまいました。多分それがあなたの問題を引き起こす原因かもしれません。

関連する問題