Очистка 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
для того, чтобы сделать это.