メソッドの実装をメンバー変数に委譲するクラスがあります。
簡単に書くために実装しました
-(void)forwardInvocation:(NSInvocation *)iInvocation;
と
-(NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector;
これにより、大量のボイラープレート コードを使用せずに、クラスでいくつかのプロトコルを実装できるようになりました。
コンパイラーが実装していないすべてのメソッドに対して警告をスローしていることを除いて、かなりうまく機能しています。これらのメソッドは実際にはメンバー変数に転送されます。これらのメソッドが実際に実装されていることをシステムに伝える方法、またはそのソースに対する警告だけを黙らせる方法はありますか?
コンパイラは 3 種類の警告を発しています。
- プロトコルのメソッドが実装されていません
- プロパティ XXX にはメソッド XXX が必要です
- 実施予定 不完全な実施
以下のコードでは、私がデリゲートするオブジェクトのクラスはShareUser
あり、インスタンスは_user
-(void)forwardInvocation:(NSInvocation *)iInvocation
{
SEL aSelector = [iInvocation selector];
if ([ShareUser instancesRespondToSelector:aSelector])
[iInvocation invokeWithTarget:_user];
else
[self doesNotRecognizeSelector:aSelector];
}
-(NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector
{
if ([ShareUser instancesRespondToSelector:aSelector])
return [ShareUser instanceMethodSignatureForSelector:aSelector];
return nil;
}