2015-04-15 7 views
1

Я пытаюсь кэшировать карты в MapBox. Когда приложение работает в Интернете, все работает. TileCacheDidFinishBackgroundCache вызывается правильно.Кэш MapBox не работает

Затем я перезапускаю приложение офлайн. Вместо карты RMMapView отображает только белый цвет.

Мой код:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[RMConfiguration sharedInstance] setAccessToken:@"pk......"]; 

    RMTileCache * tileCache = [[RMTileCache alloc] initWithExpiryPeriod:0]; 
    [tileCache setBackgroundCacheDelegate:self]; 

    tileSource = [[RMMapboxSource alloc] initWithMapID:@"mirap.ld8dbe2c"];  
    mapView = [[RMMapView alloc] initWithFrame:viewMapView.bounds 
            andTilesource:tileSource]; 

    [mapView.tileSource setCacheable:YES]; 
    [viewMapView addSubview:mapView]; 
} 


-(void)viewDidAppear:(BOOL)animated { 
    RMSphericalTrapezium rect = [mapView latitudeLongitudeBoundingBox]; 
    mapView.tileCache.backgroundCacheDelegate = self; 
    [mapView.tileCache beginBackgroundCacheForTileSource:mapView.tileSource 
               southWest:rect.southWest 
               northEast:rect.northEast 
               minZoom:10.0 
               maxZoom:20.0]; 

} 
- (void)tileCacheDidFinishBackgroundCache:(RMTileCache *)tileCache { 

    NSLog(@"DONE!"); 

} 
+0

Btw в том же проекте Я использую Realm.io. Может ли это вызвать конфликт? – mirap

ответ

2

Вот что вам нужно:

mapbox-ios-sdk-offline/ViewController.swift#L38-L44

Короче говоря, инициализирует источник плитки с картой ID представляет собой сокращенную для запроса URL удаленного метаданных.

-[RMMapboxSource initWithMapID:]

Этот метод требует подключения к сети для того, чтобы ВЫГРУЖАТЬ TileJSON используется для определения источника плитки.

Вместо этого вы также должны кэшировать tileSource.tileJSON и использовать его для инициализации источника плитки в автономном режиме.

-[RMMapboxSource tileJSON]

Полезно для сохранения локально использовать в инстанцировании источник плитки в автономном режиме.

+0

это не работает для меня. после кэширования строки tileJson, я пытаюсь открыть такую ​​карту: mapSource = [[RMMapboxSource alloc] initWithTileJSON: map_Tiles]; и pre-fetch как таковой: [self.mapboxView.tileCache beginBackgroundCacheForTileSource: self.mapboxView.tileSource southWest: sw northEast: ne minZoom: minZoom maxZoom: maxZoom]; – trdavidson

Смежные вопросы