2014-11-12 2 views
2

내 사용자가 여러 개의 오프라인지도 영역을 다운로드하고 하나의 타일 소스 만 통해 액세스 할 수 있기를 바랍니다. 내 생각은 모든 영역에 대해 RMDatabaseCache를 사용하여 RMTileCache에 추가하는 것이 었습니다.RMTileCache에서 특정 RMDatabaseCache에 대한 백그라운드 캐시 가능성?

나는이 몇 가지 방법을 시도하지만, 그들과 다른 문제로 실행했습니다

접근 1 : 가 RMTileCache 관리자에 RMDatabaseCache를 추가하고 그 RMTileCache에 대한 beginBackgroundCacheForTileSource를 시작합니다.

문제 : 타일은 항상 방금 추가 한 파일이 아닌 원래 (첫 번째) RMTileCache.db 파일로 다운로드됩니다. tileCash 배열의 특정 tileCache에 다운로드를 강제 적용 할 수 있습니까?

접근법 2 : tempRMTileCache를 만들고 그 중 하나의 beginBackgroundCacheForTileSource를 시작한 다음 tempRMTileCache.tileCashes [0]을 addCache를 통해 원래 RMTileChache에 추가하십시오.

문제 : tempRMTileCache가 원본 RMTileCache와 동일한 RMTileCache.db를 참조하며이를 변경하는 방법이없는 것처럼 보입니다. 인덱스 0에서 원래의 tileCash 배열을 삭제하고 특정 경로가있는 새 RMTileCache를 추가하는 방법을 찾으려고 시도했지만 (따라서 내가 추가 한 기존의 RMDatabaseCache에만 다운로드가 이루어짐) tileCashes 항목을 제거하는 것이 불가능한 것 같습니다.

내가 완전히 잘못된 방향으로 가고 있습니까? 아니면 방금 뭔가 빠졌습니까?

답변

0

RMMapboxSourcecacheable으로 설정 했습니까? 또한 제가 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) 
    } 
}