Очистка RMDatabaseCache в RMTileCache

Я использую автономное кэширование для загрузки предварительно сконфигурированной карты из MapBox, используя:

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

Все это прекрасно работает, и в результате получается объект RMDatabaseCache в массиве tileCache tileCache.

У меня вопрос, как мне очистить этот конкретный кеш? У меня будет несколько таких кешей, все с разными идентификаторами карты, и я хочу быть в состоянии очистить определенные. Не удается найти метод, который принимает map ID в качестве ключа очистки.

(моя цель состоит в том, чтобы иметь несколько автономных карт, отсюда и такой подход)

2 ответа

Решение

Думал, что поделюсь решением, которое сработало для меня. Это немного обходной путь, но он выполняет свою работу, не обращаясь к исходному коду MapBox и не изменяя его внутренне:

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

Кажется достаточно простым.

Мне действительно пришлось изменить исходный код в какой-то момент, хотя объем базы данных не уменьшился, поэтому мне пришлось перейти к коду MapBox и изменить строку в purseTiles: метод в RMDatabaseCache следующим образом:

     [db executeUpdate:@"VACUUM"];

Для этого нет API, но взгляните на -[RMTileCache removeAllCachedImagesForCacheKey:] и источник рассматриваемых источников мозаики, чтобы увидеть, как они создают cacheKey для того, чтобы сделать это.

Другие вопросы по тегам