私の学習の一部で、ビューコントローラーでモデルを作成し、モデルの変更のためにモデルにある種のリスナーを作成できると誰かが言及しているのを見ました。これらに正しい名前を使用しているとは思いません。おそらく、私の検索で何も出てこなかったのはそのためです。基本的に、サーバー呼び出しをコントローラーからモデルに移動したいのですが、呼び出しが完了してビューを更新するタイミングを知るために、ある種のリスナーが必要です。
5 に答える
またはブロック もう少し高度 な基本ブロック チュートリアル
デリゲートから始めて、
NSNotification NSNotification チュートリアルを使用することもできますが、すべてのクラスにブロードキャストするためお勧めしません。すべてのクラスではなく特定のクラスにメッセージを送信するだけでよい場合があります。
C#の世界に属しています。私は目的のCに行かなければなりません(私の仕事のために)。目的 c に相当するイベントは次の実装だと思います。
すべてのイベントのメソッドでプロトコルを作成します:
@protocol MyDelegate <NSObject>
- (void)myEvent;
@end
イベントを送信する必要があるクラスで、次を追加します。
@interface MyClassWichSendEvent : NSObject
@property (nonatomic, retain) IBOutlet id<MyDelegate> delegate;
@end
たとえば、必要な場所でイベントを発生させます。
- (IBAction)testEvent:(NSButton*)sender
{
[self.delegate myEvent];
}
リスナー クラスでは、次のようにイベントをリッスンする必要があります。
リッスンするプロトコルをクラスに追加します
@interface Document : NSDocument<MyDelegate>
実装では、init またはインターフェイス ビルダーで、オブジェクト インスタンスのデリゲートをリンクして、リッスンするクラスの自己とリッスンする必要があります。
コード内
-(void)awakeFromNib
{
myObjToListen.delegate = self;
}
- Interface Builder -> デリゲートからリッスンのクラスへの IBOutlet で。
最後に、リスナー クラスにメソッドを実装します。
- (void)myEvent
{
NSLog(@"i have listen this event !");
}
私の英語で申し訳ありませんが、Java または C# から移行した人々を助けてくれることを願っています。
あなたはKVOを探しています-キー/値の観察:
http://nachbaur.com/2011/07/29/back-to-basics-using-kvo/
デリゲート+通知はオブジェクト間の通信には適していますが、値が変更されたときにメッセージを自動的に送信しません(質問から、それがあなたが求めていることです)
聞いている人にメッセージを渡す方法である NSNotificationCenter を探していると思います。したがって、モデルのイベントから通知を送信し、コントローラーでそれをリッスンするだけです。よりクリーンな方法は、デリゲートを使用して独自のプロトコルを実装することです。
Objective C はデリゲートを使用します
この投稿には良い例があります: How do I create delegates in Objective-C?