我在下面标记的位置遇到运行时错误?如何从子类调用 MKTileOverlay“url”函数?收到 EXC_BAD_INSTRUCTION?
基本上想在某些地方显示自定义图 block ,但如果不可用,则返回到标准 Apple map 图 block 。
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
}
}
在我的 Controller 中
func setupTileRenderer() {
let overlay = GCMapOverlay()
overlay.canReplaceMapContent = true
mapView.addOverlay(overlay, level: .aboveLabels)
tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
}
最佳答案
删除 overlay.canReplaceMapContent = true
并更改您的保护语句,以便加载清晰的 256x256 图 block 。
guard let url = optionalUrl else {
return Bundle.main.url(forResource: "emptyTile", withExtension: "png")!
}
由于您的所有自定义图 block 已存储在本地,因此它们将立即加载到默认的 Apple 图 block 上,这使得 canReplaceMapContent
不必要。
确保您的自定义图 block 中没有 Alpha,否则 Apple 图 block 将在下面可见。
关于swift - 如何从子类调用 MKTileOverlay "url"函数?获取 EXC_BAD_INSTRUCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55942629/