Я новичок в программировании для iOS и создаю свое приложение на Swift для iOS8, а также внедряю Mapbox-ios-sdk, поскольку хочу, чтобы мой пользователь мог загружать автономные области карты.
Мне удалось загрузить автономные области карты в кеш, однако кажется, что к кешу нет доступа, когда я отключаю Wi-Fi и сотовые данные. Тайлы карты не появляются. Отображаются только фрагменты карты, которые были автоматически кэшированы.
Вижу, что тайлы загружаются (RMTileCache.db растет, вызываются методы RMTileCacheBackgroundDelegate didBeginBackgroundCacheWithCount, didBackgroundCacheTile и tileCacheDidFinishBackgroundCache) и при просмотре непосредственно в файле db также вижу, что загружены правильные тайлы.
Но когда я отключаю данные Wi-Fi и сотовой связи, фрагменты карты не загружаются на экран. Я пробовал несколько вариантов с добавлением дополнительных кэшей RMDatabase и т. д., но ничего не работает. Я надеюсь, что кто-то там столкнулся с той же проблемой и может помочь мне.
Мой код примерно основан на этом фрагменте здесь: https://mapbox.com/mapbox-ios-sdk/#tile_caching__class
Соответствующие переменные уровня класса:
var tileSource: RMMapboxSource = RMMapboxSource()
@IBOutlet var mapView: RMMapView!
viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
let fullPath: String = NSBundle.mainBundle().pathForResource("mapbox", ofType: "json")!
var errorInFullPath:NSErrorPointer? = NSErrorPointer()
let tileJSON: String? = String(contentsOfFile: fullPath, encoding:NSUTF8StringEncoding, error: errorInFullPath!)
tileSource = RMMapboxSource(tileJSON: tileJSON)
initializeMap()
}
Инициализация карты:
func initializeMap() {
mapView = RMMapView(frame: self.view.bounds)
mapView.tileSource = tileSource
tileSource.cacheable = true
mapView.adjustTilesForRetinaDisplay = true
mapView.userInteractionEnabled = true
mapView.zoom = 9
self.view.addSubview(mapView)
mapView.delegate = self
}
Операция загрузки:
func startDownload() {
mapView.tileCache.backgroundCacheDelegate = self
mapView.tileCache.beginBackgroundCacheForTileSource(tileSource, southWest: sw, northEast: ne, minZoom: 1, maxZoom: zoomLevel)
}
sw, ne и zoomLevel были определены в другом месте кода, и их значения хороши, когда я распечатываю их непосредственно перед командой beginBackgroundCacheForTileSource.
Я не уверен, что я делаю неправильно здесь. Наверное, что-то действительно глупое, но я пытаюсь найти это уже 2 дня. Надеюсь, кто-нибудь может мне помочь.
Заранее спасибо!