Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法强制转换类型为';MKMapView';至';MKOverlay';_Ios_Swift - Fatal编程技术网

Ios 无法强制转换类型为';MKMapView';至';MKOverlay';

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

我在Xcode8中创建了一个库,其中有一个方法用于将映射添加到MapKitView,并将该库导入到一个示例项目中,我在库中调用了该方法,然后出现了一个错误,名为“无法将“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.
    }
}

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

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编程的基础知识,使用自己的框架只会产生比一开始解决的问题更多的问题。