iOS 4の前に、マップビューに追加された各MKAnnotationView
にオブザーバを追加して、選択したメソッドをリッスンしていたので、ユーザーがピンをタップしたことを知りました。メソッドのプロトコルをテストするには?
これはiOS 4.2までうまくいきました。私は注釈ビューが実際に再利用されていることに気付きました。そして、それは何らかの形でオブザーバーとうんざりしています。
私はメソッドをMKMapViewDelegate
から私のニーズに使用できますが、これはiOS 4.0 SDKにのみ追加されていることがわかります。
互換性を維持するために、このメソッドを代理人に実装し、MKMapViewDelegate
プロトコルでこのメソッドが存在するかどうかを条件的にチェックして、存在しない場合は注釈ビューにオブザーバーを追加します。
プロトコルメソッドでこれを行うにはどうすればよいのですか?クラスがnilでないかどうかを確認する方法と同様です。
UPDATE:
ダニエルDickisonが指摘したように、私の代理人は、4.0以降のデバイスのための-mapview:didSelectAnnotationView:
を実施しているので、私は、respondsToSelector:
を使用することはできません。私が必要とするのは、そのデバイス上のプロトコルが-mapview:didSelectAnnotationView:
メソッドまたはの場合、MKMapView
がそのメソッドをデリゲートで探すかどうかをチェックすることです。
実行中のiOSバージョンのテストを終了しました。 4.0より大きい場合、MKMapView
はそのメソッドを探して呼び出します。
if ([[[UIDevice currentDevice] systemVersion] doubleValue] < 4.0)
[self setupObserver];
これは元の問題を解決しますが、方法の実際のプロトコルを何らかの形でチェックすることはまだ興味深いでしょう。
Chris - SEL変数名として予約キーワードselectを使用したくない場合があります。 – DHamrick
@DHamrick、あなたは絶対に正しい...だから私はすぐに手紙を書きました。 –
"respondsToSelector"はあなたが尋ねる唯一のオブジェクトなので、使用することはできません! MKMapViewがデリゲートからそのメソッドを探しているかどうかを調べる必要があります。 –