gpt4 book ai didi

ios - 无法将类型 'MKMapView' 的值转换为 'MKOverlay'

转载 作者:行者123 更新时间:2023-11-28 06:12:58 25 4
gpt4 key购买 nike

我在 Xcode8 中创建了一个库,其中包含一个用于将 map 添加到 MapKitView 的方法,我将该库导入到一个示例项目中,然后我调用了库中的方法,然后我收到一个名为“Could not cast value of type”的错误MKMapView' (0xdc7a48) 到 'MKOverlay' (0xdcca0c)。(lldb)“

库中的代码

import Foundation
import MapKit
public class mapLib: NSObject{

public class func createMap(mapView: MKMapView) ->MKMapView{
let mapView = mapView
//custom map URL
let template = "http://tile.openstreetmap.org/{z}/{x}/{y}.png"
let overlay = MKTileOverlay(urlTemplate: template)
overlay.canReplaceMapContent = true
mapView.add(overlay, level: .aboveLabels)
return mapView;
}
}

示例应用中使用的代码

import UIKit
import MapKit
import mapLib
class ViewController: UIViewController {

@IBOutlet weak var mapV: MKMapView!

override func viewDidLoad() {
super.viewDidLoad()

let view = mapLib.createMap(mapView: mapV)
mapV.add(view as! MKOverlay) /////// Thread 1: signal SIGABRT
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

我已经评论了示例应用代码中的错误

最佳答案

MKOverlayMKMapView 默认不遵守的协议(protocol),因此会出现错误。将一个 MKMapView 对象作为叠加层添加到另一个 MKMapView 根本行不通,因为 MKMapView 不仅仅是一个简单的叠加层对象。

如果您真正需要的是将一个 MKMapView 的所有叠加层添加到另一个,您需要使用以下代码:

let view = mapLib.createMap(mapView: mapV)
mapV.addOverlays(view.overlays)

关于ios - 无法将类型 'MKMapView' 的值转换为 'MKOverlay',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45957917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com