Ios 无法强制转换类型为';MKMapView';至';MKOverlay';
我在Xcode8中创建了一个库,其中有一个方法用于将映射添加到MapKitView,并将该库导入到一个示例项目中,我在库中调用了该方法,然后出现了一个错误,名为“无法将“MKMapView”(0xdc7a48)类型的值强制转换为“MKOverlay”(0xdcca0c)。 (lldb)” 库中的代码Ios 无法强制转换类型为';MKMapView';至';MKOverlay';,ios,swift,Ios,Swift,我在Xcode8中创建了一个库,其中有一个方法用于将映射添加到MapKitView,并将该库导入到一个示例项目中,我在库中调用了该方法,然后出现了一个错误,名为“无法将“MKMapView”(0xdc7a48)类型的值强制转换为“MKOverlay”(0xdcca0c)。 (lldb)” 库中的代码 import Foundation import MapKit public class mapLib: NSObject{ public class func createMap(ma
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.
}
}
我已经评论了示例应用程序代码中的错误
MKOverlay
是默认情况下不符合的协议,因此出现了错误。将MKMapView
对象作为覆盖添加到另一个MKMapView
对象是无法工作的,因为MKMapView
不仅仅是一个简单的覆盖对象
如果您实际需要将一个MKMapView
的所有覆盖添加到另一个,则需要使用以下代码:
let view = mapLib.createMap(mapView: mapV)
mapV.addOverlays(view.overlays)
你真的读到错误了吗?为什么将
MKMapView
强制转换为MKOverlay
有效?“你到底想实现什么?”DávidPászor说,“我不是在尝试,而是说你不能通过给予来实现。”suggestions@DávidPásztor我需要调用库中的方法来示例应用程序,因此是否有其他方法来执行此操作?您给出了错误的解决方案,但存在问题。自定义地图不会显示,但会显示MapKit mapIf如果要显示来自库的完整MKMapView
,则应将类定义为@IBDesignable,并将自定义地图视图添加到情节提要中的视图控制器中。或者从故事板中删除当前的mapView
outlet,并添加由库以编程方式创建的自定义地图视图。可能您的方法可行:)但我是Xcode新手,因此我不熟悉它,因此您可以为其提供示例代码。是一个关于如何创建自己的IBDesignable子类的教程。但是,您可能不需要深入了解这么多细节。只需在框架中创建一个继承自MKMapView
的类,将该类标记为IBDesignable,并在情节提要中将自定义类添加到视图控制器,而不是内置的MKMapView
。不过,这与原来问题的范围相去甚远,如果你真的不能相处,我建议你提出一个新问题。此外,我建议现在不要建立一个框架,由于您似乎缺乏iOS编程的基础知识,使用自己的框架只会产生比一开始解决的问题更多的问题。