2009-05-09 5 views
66

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

+4

Vague вопроса. Попробуйте задать более конкретный вопрос или выполните поиск документации Apple. – danielpunkass

+6

Я бы обычно не прокомментировал такой вопрос, но, видя, как вы получили «con», тогда моя может быть «профессионалом». Этот вопрос позволяет * краткий * ответ, касающийся строго этой темы. Я просто хочу узнать одну простую вещь - не * scour * документацию яблока (которая, скорее всего, стоила бы - в любом случае). Так что спасибо за задание этого вопроса. Я вижу ваш +15 атм на вопрос, соответствующий моему настроению. – Jacksonkr

+1

+1 тоже. Благодарю. –

ответ

80
@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.

+0

Какой смысл использовать уведомление? Почему бы просто не называть [object handleNotification] прямо? –

+3

Свободная муфта. Обратите внимание на комментарий «// else else» ... Уведомление - это своего рода широковещательное сообщение. Любой экземпляр объекта может прослушивать уведомление и не должен соответствовать какому-либо конкретному протоколу делегата или тому подобному. Может случиться много случаев при прослушивании одного сообщения. Отправитель не должен иметь указателей на экземпляр (ы) объекта, который он хочет уведомить. –

45

Шаг 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 ]; 
+0

О, спасибо большое за отличный пример. Это именно то, что мне нужно. – d12frosted

+0

Великолепный :) Спасибо большое –

5

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

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

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

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

[[NSDistributedNotificationCenter defaultCenter] removeObserver:self]; 
Смежные вопросы