2010-02-18 1 views
5

мне нужно создать два класса, и оба должны иметь возможность отправлять и получать события через methods.ie NSNotificationCenter Оба должны иметь SendEvent и receiveEvent методы:Как создать класс для отправки и получения событий через NSNotificationCenter в Objective-C?

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

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

То же, что такой другой класс говорят ClassB должны также иметь возможность отправлять и получать события. Как это можно сделать?

ответ

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.

Edit 1:

Вы можете быть чрезмерно усложнять проблему. NSNotificationCenter выступает в роли брокера, которому отправляются все события, и он решает, кому направить это. Это похоже на Observer pattern, но объекты непосредственно не наблюдают или не уведомляют друг друга, а скорее через центрального брокера - NSNotificationCenter в этом случае. При этом вам не нужно напрямую подключать два класса, которые могут взаимодействовать друг с другом с помощью #include.

При проектировании ваших классов не беспокойтесь о том, как объект получит уведомление или как он уведомит другие заинтересованные объекты, а только о том, что объект должен получать уведомления о некоторых событиях, когда они происходят, или ему необходимо сообщить NSNotficationCenter его событий, когда они происходят.

Вкратце, узнайте все события, о которых должен знать объект, и зарегистрируйте эти события в этом методе init() и отмените регистрацию их в методе dealloc().

Вы можете найти это basic tutorial полезным.

+0

Я также дал @classB в classA.h, так что теперь я могу сделать это в обоих классах как @classA в classB.h тоже. – Cathy

+0

Вы пытаетесь передать сообщения между классами A и классом B? – Anurag

+0

На самом деле мой запрос состоит в том, чтобы сделать один классA с одним NSNotificationCenter и использовать его объект, я должен иметь возможность создавать метод sendEvent() и метод SubscribeEvent(). Теперь ClassA должен иметь возможность получать события и sendEvents в любой другой класс. Как это сделать? – Cathy

Смежные вопросы