Пример пользовательского уведомления Какао - PullRequest
66 голосов
/ 09 мая 2009

Может кто-нибудь показать мне пример объекта Cocoa Obj-C с пользовательским уведомлением, как его запустить, подписаться на него и обработать?

Ответы [ 3 ]

81 голосов
/ 09 мая 2009
@implementation MyObject

// Posts a MyNotification message whenever called
- (void)notify {
  [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];
}

// Prints a message whenever a MyNotification is received
- (void)handleNotification:(NSNotification*)note {
  NSLog(@"Got notified: %@", note);
}

@end

// somewhere else
MyObject *object = [[MyObject alloc] init];
// receive MyNotification events from any object
[[NSNotificationCenter defaultCenter] addObserver:object selector:@selector(handleNotification:) name:@"MyNotification" object:nil];
// create a notification
[object notify];

Для получения дополнительной информации см. Документацию для NSNotificationCenter .

45 голосов
/ 22 июня 2010

Шаг 1:

//register to listen for event    
[[NSNotificationCenter defaultCenter]
  addObserver:self
  selector:@selector(eventHandler:)
  name:@"eventType"
  object:nil ];

//event handler when event occurs
-(void)eventHandler: (NSNotification *) notification
{
    NSLog(@"event triggered");
}

Шаг 2:

//trigger event
[[NSNotificationCenter defaultCenter]
    postNotificationName:@"eventType"
    object:nil ];
5 голосов
/ 10 декабря 2012

Обязательно отмените уведомление (наблюдателя), когда ваш объект освобожден. В документации Apple говорится: «Прежде чем объект, наблюдающий за уведомлениями, будет освобожден, он должен сообщить центру уведомлений, чтобы он прекратил отправлять ему уведомления».

Для локальных уведомлений применяется следующий код:

[[NSNotificationCenter defaultCenter] removeObserver:self];

А для наблюдателей распределенных уведомлений:

[[NSDistributedNotificationCenter defaultCenter] removeObserver:self];
...