18

私の学習の一部で、ビューコントローラーでモデルを作成し、モデルの変更のためにモデルにある種のリスナーを作成できると誰かが言及しているのを見ました。これらに正しい名前を使用しているとは思いません。おそらく、私の検索で何も出てこなかったのはそのためです。基本的に、サーバー呼び出しをコントローラーからモデルに移動したいのですが、呼び出しが完了してビューを更新するタイミングを知るために、ある種のリスナーが必要です。

4

5 に答える 5

20

デリゲートデリゲート チュートリアルを調べる

またはブロック もう少し高度 な基本ブロック チュートリアル

デリゲートから始めて、

NSNotification NSNotification チュートリアルを使用することもできますが、すべてのクラスにブロードキャストするためお勧めしません。すべてのクラスではなく特定のクラスにメッセージを送信するだけでよい場合があります。

于 2012-05-08T03:27:49.670 に答える
12

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# から移行した人々を助けてくれることを願っています。

于 2014-02-18T09:31:14.763 に答える
8

あなたはKVOを探しています-キー/値の観察:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

http://nachbaur.com/2011/07/29/back-to-basics-using-kvo/

デリゲート+通知はオブジェクト間の通信には適していますが、値が変更されたときにメッセージを自動的に送信しません(質問から、それがあなたが求めていることです)

于 2012-05-08T04:11:51.743 に答える
0

聞いている人にメッセージを渡す方法である NSNotificationCenter を探していると思います。したがって、モデルのイベントから通知を送信し、コントローラーでそれをリッスンするだけです。よりクリーンな方法は、デリゲートを使用して独自のプロトコルを実装することです。

于 2012-05-08T03:28:32.913 に答える
0

Objective C はデリゲートを使用します

この投稿には良い例があります: How do I create delegates in Objective-C?

于 2012-05-08T03:29:08.360 に答える