可可定制通知示例


68

有人可以给我展示一个带有自定义通知的可可Obj-C对象示例,如何触发,订阅和处理它?


4
模糊的问题。尝试提出更具体的问题,或搜索Apple的文档。
danielpunkass,2009年

6
我通常不会对这样的问题发表评论,但是看到您收到“骗局”后我的情况可能会成为“专家”。这个问题允许给出一个严格回答该主题的简洁答案。我只想找出一个简单的事情-而不是搜索Apple的文档(无论如何,这很可能值得)。非常感谢您提出这个问题。我认为您在这个问题上的+15 atm与我的观点一致。
Jacksonkr 2012年

这是我写的一个应用程序,它可能会对您有所
k

Answers:


82
@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的文档。


那么,使用通知有什么意义呢?为什么不直接调用[object handleNotification]?
user4951 2012年

3
松耦合。请注意“ //其他位置”注释...通知是一种广播消息。任何对象实例都可以侦听通知,而无需遵循任何特定的委托协议或类似协议。可能有很多实例在听一条消息。发送者不需要具有指向其希望通知的对象实例的指针。
Andrew Hodgkinson

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 ];

6

确保释放对象时取消注册通知(观察者)。Apple文档指出:“在释放用于监视通知的对象之前,它必须告诉通知中心停止向其发送通知”。

对于本地通知,以下代码适用:

[[NSNotificationCenter defaultCenter] removeObserver:self];

对于分布式通知的观察者:

[[NSDistributedNotificationCenter defaultCenter] removeObserver:self];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.