Как создать класс для отправки и получения событий через NSNotificationCenter в Objective-C? - PullRequest
5 голосов
/ 18 февраля 2010

Мне нужно создать два класса, и оба должны иметь возможность отправлять и получать события через методы NSNotificationCenter. Оба должны иметь методы sendEvent и receiveEvent:

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

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

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

1 Ответ

10 голосов
/ 18 февраля 2010

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

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

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

Этот базовый учебник может оказаться полезным.

...