-1

我正在学习如何使用 NSNotificationCenter。我的理解是,对于每个通知,您可以发送一个对象。有没有办法发送包含多个对象的通知,或者我必须为每个对象发布一个新通知?

4

2 回答 2

7

您可以在 的userInfo参数中传递您喜欢的任何信息postNotification:object:userInfo:

例如,您可以按如下方式调用该方法:

NSDictionary *accountDetails = @{@"accountHolder":@"Mr John Smith",
                                 @"accountNumber":@(01234567),
                                 @"sortCode":@"01-98-34"};

[[NSNotificationCenter defaultCenter] postNotificationName:@"BankDidCreateNewAccount" object:self userInfo:accountDetails];

只是为了更详细地解释:要发布带有对象的通知,您可以使用

-postNotificationName:object:或者-postNotificationName:object:userInfo:

在 object 参数中,您只能提供一个对象。通常,object参数是notificationSender,即您将从self发布通知的任何位置传递。

如果您已使用 注册通知-addObserver:selector:name:object:,并且您传递nil了除object参数之外的任何值,那么您将只会收到发布的通知对象(object参数 in -postNotificationName:object:)与 中的object参数匹配的通知-addObserver:

如果您传入nil-addObserver:则该特定观察者的object值将-postNotification:被忽略。

哇,听起来很复杂。但实际上非常简单。object如果在 中使用,参数必须匹配-addObserver:

使用userInfo参数向通知观察者提供更多细节。

于 2013-08-22T21:55:27.053 回答
1

一个通知只能有一个object。对于多个对象,这取决于您要发送它们的目的。如果每个都被单独观察,那么是的,您需要发送多个通知。如果您只需要发送上下文信息,那么您应该使用userInfo.

于 2013-08-22T20:12:33.620 回答