Caching 从RMTileCache后台缓存到特定RMDatabaseCache的可能性?

Caching 从RMTileCache后台缓存到特定RMDatabaseCache的可能性?,caching,maps,mapbox,offline-caching,Caching,Maps,Mapbox,Offline Caching,我希望我的用户能够下载多个离线地图区域,并且能够通过一个tilesource访问它们。我最初的想法是为每个区域都有一个RMDatabaseCache,并将其添加到RMTileCache中 我尝试了几种方法,但遇到了不同的问题: 方法1: 将RMDatabaseCache添加到RMTileCache管理器,并为该RMTileCache启动beginBackgroundCacheForTileSource 问题:看起来瓷砖总是下载到原始(第一个)RMTileCache.db,而不是我刚才添加的。是否

我希望我的用户能够下载多个离线地图区域,并且能够通过一个tilesource访问它们。我最初的想法是为每个区域都有一个RMDatabaseCache,并将其添加到RMTileCache中

我尝试了几种方法,但遇到了不同的问题:

方法1: 将RMDatabaseCache添加到RMTileCache管理器,并为该RMTileCache启动beginBackgroundCacheForTileSource

问题:看起来瓷砖总是下载到原始(第一个)RMTileCache.db,而不是我刚才添加的。是否有办法强制下载到tileCache阵列中的特定tileCache

方法2:创建一个tempRMTileCache并为其启动beginBackgroundCacheForTileSource,然后通过addCache将tempRMTileCache.TileCache[0]添加到原始的RMTileCache

问题:tempRMTileCache引用了与原始RMTileCache相同的RMTileCache.db,似乎没有办法改变这一点。我试图找到一种方法来删除索引0处的原始TileCache数组,并添加一个具有特定路径的新RMTileCache(从而强制下载到我添加的唯一现有RMDatabaseCache),但删除TileCache项似乎不可能


我是不是走错了路?还是我遗漏了什么?

您是否将
RMMapboxSource
设置为
可缓存的
?我所做的也是使用insertCache(cache,atIndex:0)在第一级插入
RMDatabaseCache

这是完整的代码,我在离线模式下试过了,下载了瓷砖后,效果很好

let database = RMDatabaseCache(usingCacheDir: false)
let mapView = RMMapView(frame: self.view.bounds)
self.mapView = mapView
self.mapView.tileCache.insertCache(database, atIndex: 0)
self.mapView.delegate = self
self.mapView.hideAttribution = true
self.mapView.setZoom(kMapBoxDefaultZoom, animated: false)
self.mapView.setCenterCoordinate(kMapBoxCenterLocation, animated: false)
self.mapView.hidesMapboxLogo()

self.view.addSubview(self.mapView)
self.reloadMapView()

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    let onlineSource = RMMapboxSource(mapID: kMapBoxMapID)
    onlineSource.cacheable = true

    dispatch_async(dispatch_get_main_queue()) {
        self.mapView.addTileSource(onlineSource)
        let sw = self.mapView.pixelToCoordinate(CGPoint(x: 0, y: mapView.height))
        let ne = self.mapView.pixelToCoordinate(CGPoint(x: mapView.width, y: 0))
        let maxZoom = ceil(kMapBoxDefaultZoom).uint
        self.mapView.tileCache.beginBackgroundCacheForTileSource(onlineSource, southWest: sw, northEast: ne, minZoom: 0, maxZoom: maxZoom)
        self.delegate?.mapboxView?(mapView, didFinishloadingSource: onlineSource)
    }
}