2010-12-07 18 views
7

私は、ユーザーがオフラインでGoogleのマップタイルサーバーにアクセスできない場合でも、限られた機能を提供するために、独自の基本マップをオーバーレイするMKMapViewベースのiPhone/iPadマッピングアプリケーションを開発中です。マップタイルのMKMapViewのキャッシュをクリアするにはどうすればよいですか?

この機能は動作していますが、iOSマップタイルキャッシュをフラッシュ/リセットする方法が見つからないため、新しいビルド後にテストするのが苦労しています。 iOSキャッシュは、iOSデバイスの電源を切って再起動しても有効です。以前のテストセッションでメモリ内のタイルをレンダリングしたことがある場所はどこにでもあります。

iOSにマップキャッシュを強制的にフラッシュする方法はありますか?今私が考えることができる唯一の選択肢は、テストを行う必要があるたびにOSをリフラッシュすることです。

ありがとうございます!

BTW:これはほぼthis questionと重複していますが、その場合は空のキャッシュでテストするのではなく、メモリを解放してください。ここで与えられた答えは、私がここにいるのと同じ問題ではなく、RAMの問題に焦点を当てました。

答えて

5

する。これは、キャッシュの残りのサイズは、常に我々が持っていない

+0

NSURLCacheがMKMapViewに影響することは知っていますか?私の実験では、マップビューアには別のキャッシュスペースがあるように見えましたが、間違っている可能性があります。 – radven

+1

こんにちは@radven!実際には、最初は 'MKMapView'と' NSURLCache'については懐疑的でしたが、 'NSURLCache'をサブクラス化してすべての接続を追跡し、' MKMapView' Googleコールがキャッシュを通過するのを見ました。あなたは私がこのスレッドでどのように実装しているかを見ることができますhttp://stackoverflow.com/questions/5381687/ios-track-url-connections/5928185#5928185 –

+0

私はあなたが他の質問で詳述した方法で動いています。多くの運がない。私が一度も見たことのない地図の領域を囲んでズームしている間に、私はcachedResponseForRequest:関数への呼び出しを1つしか得ず、 "http://www.google.com/glm/mmap"として記録されました。私はすべてのGoogleタイルの呼び出しを期待していました。私は間違っていた? – Craig

1

私はこの質問に遭遇しました。それは確かに興味深い問題です。明らかに、MKMapViewはタイルをどこかのディスクに保存しています(再起動しても残っているため)。潜在的な解決方法は、1)キャッシュされたタイルが保存されている場所を特定し、2)アプリが起動するときにプログラムでキャッシュを削除することです。これには、アプリケーションサンドボックスの外部にファイルアクセスを与えるためのjailbrokenデバイスが必要です。明らかに配布には適さないが、テストのためにはおそらく受け入れられるだろう。

私はこの問題が発生したときに、自分のタイルマップビューを実装し、到達可能性テストを実行してGoogleマップまたはオフラインモードを表示するかどうかを判断しました。

1

不十分であるように、あなたの接続がキャッシュされたデータの保存を停止するかもしれないあなたのMKMapView

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
[sharedCache release]; 

の任意のインスタンスを作成する前にゼロにNSURLConnectionキャッシュサイズを設定してみてくださいアプリケーション内からMKMapViewキャッシュをクリアする方法を見つけましたが、Settings \ General \ Resetの "Reset All Content and Data"を使うことができます。 これは理想的ではありませんが、実際には「OSをリフレッシュする」よりもはるかに高速ですが、実際には数分しかかかりません。 リセット後もデバイスを設定してアプリをリロードしますが、これにはさらに数分かかります。

関連する問題