5

2 つのクラスを作成する必要があり、どちらも NSNotificationCenter メソッドを介してイベントを送受信できる必要があります。つまり、両方に sendEvent メソッドと receiveEvent メソッドが必要です。

      @implementation Class A
-(void)sendEvent
{
    addObserver:---  name:---- object:---
}

-(void)ReceiveEvent
{
postNotificationName: --- object:---
}
@end

そのような別のクラスと同じように、ClassB もイベントを送受信できる必要があります。どうすればそれができますか?

4

1 に答える 1

10

理想的には、オブジェクトは、初期化されるとすぐに興味深いイベントの監視を開始します。そのため、すべての興味深いイベントを初期化コード内の NotificationCenter に登録します。基本的にメソッドsendEvent:のラッパーです。postNotification:

@implementation A

- (id)init {
    if(self = [super init]) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"SomeEvent" object:nil];
    }
    return self;
}

- (void)sendEvent {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"SomeOtherEvent" object:nil];
}

// Called whenever an event named "SomeEvent" is fired, from any object.
- (void)receiveEvent:(NSNotification *)notification {
    // handle event
}

@end

B級も同じ。

編集1:

問題を複雑にしすぎている可能性があります。NSNotificationCenter は、すべてのイベントが送信されるブローカーとして機能し、誰に転送するかを決定します。これはオブザーバー パターンに似ていますが、オブジェクトは相互に直接観察したり通知したりせず、中央のブローカー (この場合は NSNotificationCenter) を介して行います。これにより、互いに相互作用する可能性のある 2 つのクラスを . で直接接続する必要がなくなります#include

クラスを設計するとき、オブジェクトがどのように通知されるか、または他の関心のあるオブジェクトにどのように通知されるかについて心配する必要はありません。オブジェクトが発生したときにいくつかのイベントについて通知を受ける必要があるか、またはイベントが発生したときにそのイベントを NSNotficationCenter に通知する必要があることだけを考えてください。それらが発生します。

つまり、オブジェクトが知っておくべきすべてのイベントを見つけて、それらのイベントをこのinit()メソッドに登録し、dealloc()メソッドでそれらの登録を解除します。

この基本的なチュートリアルが役立つ場合があります。

于 2010-02-18T05:07:53.293 に答える