Ios 未调用MKMapViewDelegate子类方法

Ios 未调用MKMapViewDelegate子类方法,ios,swift,inheritance,mapkit,subclass,Ios,Swift,Inheritance,Mapkit,Subclass,我有一个子类,它符合NSObject,MKMapViewDelegate,并已将其分配给mapView.delegate属性,但是没有调用delegate方法。如何正确地子类化MKMapViewDelegate,并将该类设置为委托 import UIKit import MapKit class HomeVC: ViewController { @IBOutlet weak var mapView: MKMapView! didSet { mapView.delega

我有一个子类,它符合
NSObject,MKMapViewDelegate
,并已将其分配给
mapView.delegate
属性,但是没有调用delegate方法。如何正确地子类化
MKMapViewDelegate
,并将该类设置为委托

import UIKit
import MapKit

class HomeVC: ViewController {
    @IBOutlet weak var mapView: MKMapView! didSet { 
        mapView.delegate = MyMapViewDelegate() 
    }
}

class MyMapViewDelegate: NSObject, MKMapViewDelegate {
  func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

    print("Not being called")

    return renderer
  }
}

当我让HomeVC符合MKMapViewDelegate时,就会调用该方法。因此,我假设我要么没有正确地子类化,要么没有正确地实例化子类对象

我认为这是由于弱引用和委托对象上没有任何内容这一事实造成的,因此一旦该函数离开作用域,它就会被释放。在内部,对象应该始终对其委托具有弱引用,以避免保留循环,但如果您希望将
self
以外的对象作为委托,则需要具有强引用的对象

我相信这可以通过在视图控制器中创建委托属性来解决,这样就有了对该对象的强引用

class HomeVC: ViewController {
    let mapViewDelegate = MyMapViewDelegate()
    ...
}

地图视图将不会保留其委托,因此您创建的委托将立即解除分配。您必须将其保存在视图控制器上的属性中。关于swift如何处理这一点还不清楚,但这将在objective-c中引起,因为引用较弱,并且您没有任何保留委托对象的内容,因此一旦该函数离开作用域,它就会被解除分配。。。只是一个想法…@丹该死的。。。你赢了我:)谢谢!小东西总是惹麻烦的东西哈哈