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

StackOverflow https://stackoverflow.com/questions/2286347

Вопрос

Мне нужно создать два класса, и оба должны иметь возможность отправлять и получать события с помощью методов NSNotificationCenter.т. е. оба должны иметь методы 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() способ.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top