メッセージを転送するオブジェクトが他に1つしかない場合に有効なアプローチのひとつは、これを作成することです。forwardingDelegate
これにより、デリゲートのデバッグ順序が難しいという問題が発生することはなく、他のオブジェクトへの依存関係が不必要に作成されることもありません。多くのオブジェクトがある場合、これは最善のアプローチではない可能性があることに注意してください。これは主に1つの追加オブジェクト用ですが、SDKを受信して転送するオブジェクトがあれば、オブジェクトの配列をサポートするように拡張できます。他のオブジェクト[1]。転送されるオブジェクトによって使用されていない場合でも、転送されるオブジェクトに必要なすべてのメソッドは、それを渡す必要があることに注意してください。
たとえば、mapViewデリゲートからのメッセージを転送する必要がある場合:
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
// handle this object here.
if ([self.forwardingDelegate respondsToSelector:@selector(mapView:regionDidChangeAnimated:)])
{
[self.forwardingDelegate mapView:mapView regionDidChangeAnimated:animated];
}
// or handle this object here.
}
[self.forwardingDelegate mapView:mapView regionDidChangeAnimated:animated];
転送プロパティは次のように宣言されます。
@property (nonatomic) id<MKMapViewDelegate> forwardingDelegate;
そして、他のオブジェクトは、元のメッセージを受信しているかのようにプロトコルを採用します。
[1]他の投稿で言及されているように、デリゲートが呼び出される順序をあまり制御できないため、複数のデリゲートの配列アプローチは扱いにくい場合があります。