Как создать класс, чтобы отправить и получить события через NSNotificationCenter в Objective C?

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

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

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

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

5
задан falconcreek 16 June 2010 в 16:56
поделиться

1 ответ

В идеале объект начал бы наблюдать интересные события сразу после его инициализации. Таким образом, он будет регистрировать все интересные события в 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 () .

Вы можете найти это базовое руководство полезным.

10
ответ дан 13 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: