未调用 MKMapViewDelegate 子类方法
MKMapViewDelegate subclass method not called
我有一个符合 NSObject, MKMapViewDelegate
- 的子 class class- 并将其分配给 mapView.delegate
属性 但是委托方法不是被调用。我怎样才能正确地 subclass MKMapViewDelegate
并将 class 设置为委托?
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 时 - 该方法将被调用。所以我假设我没有正确地 subclassing 或正确地实例化 subclassed 对象。
我认为这是由于弱引用和您没有任何内容保留在委托对象上的事实造成的,因此一旦该函数离开范围,它就会被释放。在内部,一个对象应该始终对其委托有一个弱引用,以避免循环保留,但是如果你想要 self
以外的对象作为委托,你需要一些具有强引用的东西。
我相信这可以通过在您的视图控制器中创建一个委托 属性 来解决,这样就有对该对象的强引用...
class HomeVC: ViewController {
let mapViewDelegate = MyMapViewDelegate()
...
}
我有一个符合 NSObject, MKMapViewDelegate
- 的子 class class- 并将其分配给 mapView.delegate
属性 但是委托方法不是被调用。我怎样才能正确地 subclass MKMapViewDelegate
并将 class 设置为委托?
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 时 - 该方法将被调用。所以我假设我没有正确地 subclassing 或正确地实例化 subclassed 对象。
我认为这是由于弱引用和您没有任何内容保留在委托对象上的事实造成的,因此一旦该函数离开范围,它就会被释放。在内部,一个对象应该始终对其委托有一个弱引用,以避免循环保留,但是如果你想要 self
以外的对象作为委托,你需要一些具有强引用的东西。
我相信这可以通过在您的视图控制器中创建一个委托 属性 来解决,这样就有对该对象的强引用...
class HomeVC: ViewController {
let mapViewDelegate = MyMapViewDelegate()
...
}