2012-03-28 9 views
0

通知で使用すると、デリゲートとセレクタという概念が新しくなりました。だから私の最初の質問はデリゲートメソッドの呼び出しとセレクタの呼び出し

です)1)doWorkメソッドを実装するデリゲートを持つボタンがあるとしましょう。メソッドにあるのと同じ機能が必要な場合は、そのメソッドを呼び出すだけでいいですか?私はそれが良いコーディング慣行と見なされているかどうか、それを行うべきかどうか、あるいはそのタイプの機能を得るために何か違うことをしているかどうかはわかりませんでした。それはokのアーキテクチャのように?

2)同様に、NSNotificationCenterでは、通知を送信するコードがいくつか表示されます。次に、HandleSegmentedControl:(NSNotification *)notificationメソッドがあります。もし私が手動でその機能を持っていて、セグメントコントロールを押さずにしたいのであれば、その機能をそのメソッドから取り出して新しいメソッドに入れるだけです。

オリジナル:

- (void)HandleSegmentedControl:(NSNotification *)notification { 
    NSDictionary *dict = [userInfo notification]; 
    // do stuff with the dictionary 
} 

新:これらは基本的な質問であれば

- (void)HandleSegmentedControl:(NSNotification *)notification { 
    NSDictionary *dict = [userInfo notification]; 
    [self newMethod:dict]; 
} 

- (void)newMethod:(NSDictionary *)dict { 
    // do stuff with the dictionary 
} 

- (void)myOtherMethodThatNeedsTheSameFunctionality { 
    NSDictionary *dict = // create some dictionary 
    [self newMethod:dict]; 
} 

申し訳ありません。私はベストプラクティスがこのようなものであるかどうか分かりませんし、正しい方法を始めたいと思っています。ありがとう。

答えて

0
  1. デリゲートプロトコルが必要な方法としてdoWorkメソッドを実装する場合は、[はい。しかし、それは任意の方法である、またはあなたが余分に安全になりたい場合は、あなたが行うために合理的なことのように思える

    if ([delegate respondsToSelector:@selector(doWork)]) { 
        [delegate doWork]; 
    } 
    
  2. 確かに、使用する必要があります。コードをより堅牢にする一般的な方法です。通知のuserInfoがあるので、好きなようにデータを送信できます。しかし、あなたのコードでは[notification userInfo]ではないと思います。[userInfo notification]です。

関連する問題