2014-02-24 20 views
0

我使用離線緩存,使用它來下載從MapBox預配置的地圖:清理RMDatabaseCache在RMTileCache

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作爲清理鍵的方法。

(我的目的是有多個離線地圖,因此這種方法)

回答

0

想到我會分享爲我制定的解決方案。 這有點變通方法,但沒有得到跳進MapBox源代碼,並在內部改變它所做的工作:

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

似乎很簡單。

我也必須修改源代碼,在一個點上,雖然,數據庫足跡並沒有變小,所以只好跳進MapBox代碼並更改purseTiles行:方法RMDatabaseCache如下:

 [db executeUpdate:@"VACUUM"]; 
0

沒有這個的API,但看看-[RMTileCache removeAllCachedImagesForCacheKey:]和正在討論的區塊源極(S)與源看他們如何構建cacheKey爲了做到這一點。

+0

嘿, 我昨天去這條路線,但無法找到正在使用什麼關鍵瓦片存儲在上面的情況。這不是地圖ID,API是有點盒裝的。我會嘗試切換到MapBox的源代碼版本,而不是靜態庫,可能會產生一些結果。 – Yasper