Я должен создать два класса, и оба должны смочь отправить и получить события через NSNotificationCenter methods.ie И должны иметь sendEvent и receiveEvent методы:
@implementation Class A
-(void)sendEvent
{
addObserver:--- name:---- object:---
}
-(void)ReceiveEvent
{
postNotificationName: --- object:---
}
@end
То же как таковое другой класс говорит, что ClassB должен также смочь отправить и получить события. Как это может быть сделано?
В идеале объект начал бы наблюдать интересные события сразу после его инициализации. Таким образом, он будет регистрировать все интересные события в 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. При этом вам не нужно напрямую связывать два класса, которые могут взаимодействовать друг с другом, с помощью #include
.
При разработке ваших классов не беспокойтесь о том, как объект будет получать уведомления или как он будет уведомлять другие заинтересованные объекты, только о том, что объект должен получать уведомления о некоторых событиях, когда они происходят, или он должен информировать NSNotficationCenter о свои события, когда они происходят.
Короче говоря, узнайте все события, о которых должен знать объект, и зарегистрировать эти события в методе init ()
, а отменить их регистрацию в методе dealloc ()
.
Вы можете найти это базовое руководство полезным.