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

没有用于此的 API,但请查看有-[RMTileCache removeAllCachedImagesForCacheKey:]问题的 tile 源的来源,以了解它们如何构建cacheKey以执行此操作。

于 2014-02-24T17:34:23.257 回答
0

以为我会分享对我有用的解决方案。这是一种解决方法,但无需跳入 MapBox 源代码并在内部进行更改即可完成工作:

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

看起来很简单。

虽然我确实不得不修改源代码,但数据库占用空间并没有变小,所以我不得不跳入 MapBox 代码并在 RMDatabaseCache 中的 purseTiles:method 中更改一行,如下所示:

     [db executeUpdate:@"VACUUM"];
于 2014-03-11T10:02:36.220 回答