MKMapViewDelegate子类的方法不叫
问题描述:
我有一个符合NSObject, MKMapViewDelegate
的子类 - 并已将其分配给mapView.delegate
属性,但委托方法没有被调用。我如何正确地将MKMapViewDelegate
进行子类化并将该类设置为委托?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 = MyMapViewDelegate() ... ... }
地图视图将不保留其委托,所以您创建的委托会在之后立即解除分配。您必须将其保存在视图控制器的属性中。 – dan
模糊了swift如何处理这个问题,但是这会由于weak引用而导致在objective-c中产生,以及您没有任何事物持有委托对象,因此只要该函数离开作用域就会释放它。 ..只是一个想法... – Mike
@丹该死......你打败了我:) – Mike