2011-07-10 9 views
0

私のプロジェクトには、そのデリゲートにリダイレクトする多くのviewcontrollerがあります。 私はそれを定義しましたが、名前についてはあまり幸せではありません。DELEGATE_TRY_PERFORM_SELECTOR_WITH_SELFよりも優れた名前

どのように名前を付けますか、別の方法でやりますか?

デリゲートがオブジェクトを返すか、 複数の引数を取る状況もあります。あなたにその方法を提供するUIViewControllerCategoryを作成しないのはなぜ


// the problem is highly repetitive code  
-(void)switchToNextTab:(id)sender { 

    SEL sel = @selector(switchToNextTab:); 
    if([m_delegate respondsToSelector:sel]) { 
     [m_delegate performSelector:sel withObject:self]; 
    } 
} 

-(void)switchToPrevTab:(id)sender { 
    SEL sel = @selector(switchToPrevTab:); 
    if([m_delegate respondsToSelector:sel]) { 
     [m_delegate performSelector:sel withObject:self]; 
    } 
} 

-(void)closeTab:(id)sender { 
    SEL sel = @selector(closeTab:); 
    if([m_delegate respondsToSelector:sel]) { 
     [m_delegate performSelector:sel withObject:self]; 
    } 
} 

// my solution.. which I need a better name for 
#define DELEGATE_TRY_PERFORM_SELECTOR_WITH_SELF(selector_name) \ 
    do { \ 
     SEL sel = @selector(selector_name); \ 
     if([m_delegate respondsToSelector:sel]) { \ 
      [m_delegate performSelector:sel withObject:self]; \ 
     } \ 
    } while(0); 


-(void)switchToNextTab:(id)sender { 
    DELEGATE_TRY_PERFORM_SELECTOR_WITH_SELF(switchToNextTab:); 
} 
+0

この質問は、プログラミングスタイルに関するものなので、話題にはならないようです。プログラマーのスタック交換ではより良いでしょう。 – user1118321

+0

@ user1118321よろしくお願いします。 (私はそれを削除することはできません) – neoneye

答えて

1

まず、.h + .mファイルを作成します。コンベンションでは通常、カテゴリを追加しているクラスの名前を使用して、+とし、それを呼びたいものを使用します。この例では、私はあなたがこの方法を使用する(またはそれはあなたのプロジェクト全体を通して使用されている場合.pchを検討)したいところはどこでもあなたはこのファイルをインポートする(UIViewController+additional

// UIViewController+additional.h 
@interface UIViewController (additions) 
    - (void)MYsafePerformSelectorOnDelegate:(SEL)selector withObject:(id)anObject; 
@end 

// UIViewController+additions.m 
@implementation UIViewController (additions) 

    - (void)MYsafePerformSelectorOnDelegate:(SEL)selector withObject:(id)anObject 
    { 
    if([m_delegate respondsToSelector:selector]) { 
     [m_delegate performSelector:selector withObject:anObject]; 
    } 
    } 

@end 

それをシンプルにしておこう。これでいつでも、あなたはメソッド

[self MYsafePerformSelectorOnDelegate:@selector(closeTab:) withObject:self]; 

NOTEを呼び出すことができます(つまり、インポートUIViewController+additional.hを持っている)UIViewControllerサブクラスである:彼らがの少ないチャンスを持っているようなカテゴリにあなたのメソッド名の前に付けるために、通常は良いアイデアです内部的な方法と衝突する。

+0

ああ、ありがとう。これは、私が望んでいたよりもはるかにエレガントなソリューションです。 – neoneye

関連する問題