swift - 如何从子类调用 MKTileOverlay "url"函数?获取 EXC_BAD_INSTRUCTION

标签 swift mapkit mktileoverlay

我在下面标记的位置遇到运行时错误?如何从子类调用 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/

相关文章:

xcode - 如何在 Swift 中使用比较运算符分配 "bigger than but smaller than"?

swift - MKTileOverlay - 添加捆绑瓷砖

iOS - 一些图 block 未在自定义 MKTileOverlay 中呈现

ios - 如何让 MKPolylines 在 MKMapView (iOS) 中正确地跟随道路?

swift - MKTileOverlay,180.0/-180.0 处的图 block 绘制不一致

ios - 隐式成员表达式是用 Swift 编写的首选方式吗

ios - Firebase addStateDidChangeListener

ios - 由于光线不足,如何在自动闪光模式下打开或关闭闪光灯时收到通知

iOS 7 - 使用 MKOverlayRenderer 在 MapKit 上绘制一组坐标

ios - 向 MKMapview 添加自定义注释