Objective-CでNSNotificationCenterを通じてイベントを送信および受信するクラスを作成する方法?
-
21-09-2019 - |
質問
私は2つのクラスを作成する必要があるとの両方がNSNotificationCenterのmethods.ieを通じてイベントを送受信することができるはず両方のSendEventとたreceiveEventメソッドを持っている必要があります:
@implementation Class A
-(void)sendEvent
{
addObserver:--- name:---- object:---
}
-(void)ReceiveEvent
{
postNotificationName: --- object:---
}
@end
など他のクラスと同じではClassBのは、イベントを送受信することができるはずです。どのようにそれを行うことができますか?
解決
理想的オブジェクトは、その初期化できるだけ早く面白いイベントを観察し始めるでしょう。だから、その初期化コード内の通知センターを持つすべての興味深いイベントを登録します。 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:
あなたは上に複雑な問題であるかもしれません。 A NSNotificationCenterは、すべてのイベントが送信され、誰にブローカーとして機能し、それがにそれを転送するために誰が決めます。これは Observerパターンのようなものだが、オブジェクトは、直接ではなく、Aを、観察したりお互いに通知しません。中央のブローカー - この場合はNSNotificationCenter。あなたがする必要がないことを直接#include
でお互いに相互作用する可能性がある2つのクラスを接続してます。
、オブジェクトが通知を受けるだろうか心配したり、それは、彼らが発生したときに、オブジェクトのニーズは、いくつかのイベントについての通知を得るためだけにすることを、他の興味のオブジェクトに通知する方法を、またはそれはのNSNotficationCenterに通知する必要はありませんそのイベントは、発生ます。
だから、要するに、オブジェクトが知っているとinit()
方法でこのdealloc()
方法では、それら登録解除これらのイベントを登録する必要があることをすべてのイベントを見つけるます。
あなたはこれを見つけることが基本的なチュートリアルに役立ちます。