未调用 MKMapViewDelegate 子类方法
Posted
技术标签:
【中文标题】未调用 MKMapViewDelegate 子类方法【英文标题】:MKMapViewDelegate subclass method not called 【发布时间】:2017-07-14 09:59:39 【问题描述】:我有一个符合NSObject, MKMapViewDelegate
- 的子类,并将其分配给mapView.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 时 - 该方法将被调用。所以我假设我没有正确子类化或正确实例化子类化对象。
【问题讨论】:
地图视图不会保留其委托,因此您创建的委托会在之后立即被释放。您必须将其保存在视图控制器的属性中。 模糊处理这个问题的速度,但这会在objective-c中由于弱引用和你没有任何东西持有委托对象的事实而引起,所以它被释放为一旦该功能离开范围......只是一个想法...... @dan 该死的......你打败了我 :) 欣赏!小事总是惹事的哈哈 【参考方案1】:我认为这是由于弱引用和您没有任何东西持有委托对象的事实,所以一旦该函数离开范围,它就会被释放。在内部,对象应始终对其委托具有弱引用以避免保留循环,但如果您希望 self
以外的对象作为委托,则需要具有强引用的对象。
我相信这可以通过在您的视图控制器中创建一个委托属性来解决,以便对该对象具有强引用...
class HomeVC: ViewController
let mapViewDelegate = MyMapViewDelegate()
...
【讨论】:
以上是关于未调用 MKMapViewDelegate 子类方法的主要内容,如果未能解决你的问题,请参考以下文章