0

オフライン キャッシングを使用して、次を使用して MapBox から事前構成済みのマップをダウンロードしています。

tileCache = [[RMTileCache alloc] initWithExpiryPeriod:NSIntegerMax];
RMMapboxSource * tileSource = [[RMMapboxSource alloc] initWithMapID:mapID];
[tileCache beginBackgroundCacheForTileSource:tileSource southWest:southWest northEast:northEasth minZoom:minZoom maxZoom:maxZoom];

これはすべて正常に機能し、結果は tileCache の tileCaches 配列内の RMDatabaseCache オブジェクトです。

私の質問は、この特定のキャッシュをクリーンアップするにはどうすればよいですか? これらのキャッシュを複数持ち、すべて異なるマップ ID を持ち、特定のものをクリーンアップできるようにしたいと考えています。mapID をクリーンアップ キーとして使用するメソッドが見つかりません。

(私の目的は複数のオフライン マップを用意することなので、このアプローチです)

4

2 に答える 2

0

私にとってうまくいった解決策を共有したいと思いました。ちょっとした回避策ですが、MapBox のソースコードに飛び込んで内部的に変更することなく、作業を完了できます。

RMMapboxSource * tileSource = [[RMMapboxSource alloc] initWithMapID:MAP_ID];
RMMapView *mapView = [[RMMapView alloc] initWithFrame:CGRectZero andTilesource:tileSource];
[mapView removeAllCachedImages];

十分に単純に思えます。

ただし、ある時点でソースコードを変更する必要がありましたが、データベースのフットプリントは小さくなりませんでした。そのため、MapBox コードに飛び込んで、RMDatabaseCache の walletTiles:method の行を次のように変更する必要がありました。

     [db executeUpdate:@"VACUUM"];
于 2014-03-11T10:02:36.220 に答える
0

このための API はありませんが、-[RMTileCache removeAllCachedImagesForCacheKey:]問題のタイル ソースのソースを調べて、cacheKeyこれを行うためにどのように を構築するかを確認してください。

于 2014-02-24T17:34:23.257 に答える