2017-02-23 8 views
0

NSObject, MKMapViewDelegateに準拠するサブクラスクラスがあり、それをmapView.delegateプロパティに割り当てましたが、デリゲートメソッドは呼び出されません。 MKMapViewDelegateを適切にサブクラス化し、そのクラスをデリゲートとして設定するにはどうすればよいですか?MKMapViewDelegateサブクラスメソッドが呼び出されていない

私はHomeVCが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 
    } 
} 

- メソッドが呼び出さになるだろう。だから、私は正しくサブクラス化していないか、サブクラス化されたオブジェクトを正しくインスタンス化していないと仮定しています。

+1

...そのオブジェクトへの強い参照がありますように、これはあなたのビューコントローラにデリゲートプロパティを作成することで解決できると信じてあなたが作成したデリゲートはすぐに解放されます。ビューコントローラのプロパティに保存する必要があります。 – dan

+1

ファジーはこれをいかに迅速に処理しますか?これは弱い参照やデリゲートオブジェクトに何も保持していないという事実のために客観的に起こります。したがって、その関数がスコープから離れるとすぐに割り当てが解除されます。 ..ちょっと考えて... – Mike

+0

@ダンダン...あなたはそれに私を打つ:) – Mike

答えて

0

これは弱い参照と、デリゲートオブジェクトに何も持たないという事実のために起こると思います。そのため、その関数がスコープを離れるとすぐに割り当てが解除されます。内部的には、保持サイクルを避けるためにオブジェクトには委任が常に弱い参照が必要ですが、self以外のオブジェクトを代理人にしたい場合は、強い参照が必要なものが必要です。

私は、マップビューは、そのデリゲートを保持しません

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

関連する問題