0

如果我想在不同的类中添加观察者,有人可以解释如何使用通知中心吗?例如:在 classA 中发布通知。然后,添加两个观察者,一个在 B 类中,另一个在 C 类中,都在等待相同的通知。

我知道我可以使用 NSNotificationCenter 来发送和接收这样的通知。为了实现这一点,我需要在每个类中添加什么?

4

3 回答 3

6

这正是 notificationCenter 的用途:它本质上是一个公告板,班级可以在其中发布其他班级可能感兴趣的内容,而无需了解它们(或关心是否有人真正感兴趣)。

因此,有一些有趣的事情要讲的课程(您的问题中的 A 类)只需将通知发布到中央公告板:

//Construct the Notification
NSNotification *myNotification = [NSNotification notificationWithName:@"SomethingInterestingDidHappenNotification"
                                                               object:self //object is usually the object posting the notification
                                                             userInfo:nil]; //userInfo is an optional dictionary

//Post it to the default notification center
[[NSNotificationCenter defaultCenter] postNotification:myNotification];

在每个有兴趣获得通知的类中(您问题中的 B 类和 C 类),您只需将自己作为观察者添加到默认通知中心:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@SEL(methodYouWantToInvoke:) //note the ":" - should take an NSNotification as parameter
                                             name:@"SomethingInterestingDidHappenNotification" 
                                           object:objectOfNotification]; //if you specify nil for object, you get all the notifications with the matching name, regardless of who sent them

您还可以@SEL()在类 B 和 C 中实现上述部分中指定的方法。一个简单的示例如下所示:

//The method that gets called when a SomethingInterestingDidHappenNotification has been posted by an object you observe for
- (void)methodYouWantToInvoke:(NSNotification *)notification
{
    NSLog(@"Reacting to notification %@ from object %@ with userInfo %@", notification, notification.object, notification.userInfo);
    //Implement your own logic here
}
于 2013-06-14T18:59:19.183 回答
2

要发送通知,您想致电

[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationName" object:nil];

要接收通知,您需要致电

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(methodNameToCallWhenNotified)
                                                 name:@"NotificationName"
                                               object:nil];

然后,要删除该类作为观察者,您可以使用

[[NSNotificationCenter defaultCenter] removeObserver:self];

此外,有关详细信息,请参阅Apple 的 NSNotificationCenter 文档

于 2013-06-14T18:59:57.033 回答
0

所以有什么问题?您只需将它们全部添加即可。这就是通知的酷炫之处。当通知发布时,每个观察者都会执行自己的选择器。而已

于 2013-06-14T18:54:00.890 回答