我正在学习如何使用 NSNotificationCenter。我的理解是,对于每个通知,您可以发送一个对象。有没有办法发送包含多个对象的通知,或者我必须为每个对象发布一个新通知?
2 回答
您可以在 的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
参数向通知观察者提供更多细节。
一个通知只能有一个object
。对于多个对象,这取决于您要发送它们的目的。如果每个都被单独观察,那么是的,您需要发送多个通知。如果您只需要发送上下文信息,那么您应该使用userInfo
.