我在下面标记的点上遇到运行时错误?如何从子类调用mktileoverlay“url”函数?正在获取exc_bad_指令?
基本上想在某些地方显示自定义的分幅,但如果不可用,请返回到标准的苹果地图分幅。
class GCMapOverlay : MKTileOverlay {
override func url(forTilePath path: MKTileOverlayPath) -> URL {
// Get local custom map tile if available
let optionalUrl = Bundle.main.url(
forResource: "\(path.y)",
withExtension: "png",
subdirectory: "tiles/\(path.z)/\(path.x)",
localization: nil)
NSLog("tiles/\(path.z)/\(path.x)/\(path.y)")
guard let url = optionalUrl else {
// Local tile not available - want to drop back to an apple maps tile (as if MKTileOverlay wasn't subclassed)
return super.url(forTilePath: path) // <== RUNTIME ERROR: NetworkLoad (10): EXC_BAD_INSTRUCTION
}
// Local tile available so return
return url
}
}
在我的控制器中
func setupTileRenderer() {
let overlay = GCMapOverlay()
overlay.canReplaceMapContent = true
mapView.addOverlay(overlay, level: .aboveLabels)
tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
}
最佳答案
移除overlay.canReplaceMapContent = true
并更改保护声明,以便加载一个透明的256x256磁贴。
guard let url = optionalUrl else {
return Bundle.main.url(forResource: "emptyTile", withExtension: "png")!
}
由于所有自定义磁贴都已存储在本地,因此它们将立即加载到默认的apple磁贴上,这使得
canReplaceMapContent
不必要。确保您的自定义磁贴中没有alpha,否则苹果磁贴将在下面可见。
关于swift - 如何从子类调用MKTileOverlay“URL”函数?得到EXC_BAD_INSTRUCTION,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55942629/