是否可以通过nsnotification将数组作为obj传递

时间:2012-07-24 14:46:35

标签: iphone ios nsnotifications

我可以通过使用协议和委托来做到这一点,但我想尝试使用NSNotification

我的任务是通过一个视图向另一个视图发送NSMutableArray通知。是否可以

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:myArray];

然后,在接收器中,我如何获得传递的myArray。我正在阅读并对通知对象的userInfoobject感到困惑。

请就此问题向我提出建议。

4 个答案:

答案 0 :(得分:30)

NSNotification有一个名为userInfo的属性NSDictionaryobject是发布NSObject的{​​{1}}。因此,当我设置NSNotification时,我通常会self使用object,因为NSNotification是发送self的{​​{1}}。如果您希望使用NSObject传递NSNotification,我会执行以下操作:

NSArray

然后使用以下内容捕获它:

NSNotification

其中NSArray *myArray = ....; NSDictionary *theInfo = [NSDictionary dictionaryWithObjectsAndKeys:myArray,@"myArray", nil]; [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:self userInfo:theInfo]; 是发送[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doTheReload:) name:@"reloadData" object:sendingObject]; 的对象。

最后,使用:

sendingObject中解码数组
NSNotification

这总是对我有用。祝你好运!

答案 1 :(得分:2)

您应该使用userInfo。它适用于您希望随通知发送的misc数据。 object参数用于触发事件的对象。例如,如果要监视某个MPMoviePlayerController(而不是其他人),那么您只需注册其通知(通过object参数)。

答案 2 :(得分:1)

非常一致,因为当您使用{{{}发布任何通知时,对象object userInfo userInfo 1}}方法。

是的,您可以通过-postNotificationName:object:userInfo:发布NSObject的任何子类。

答案 3 :(得分:0)

Swift 4,Swift 5

NotificationCenter.default.post(name: Notification.Name("favoriteIsDeleted"), object: [message, self.viewModel.deleteSuccessIcon])

@objc func favoriteIsDeleted(notification: Notification) {
    guard let object = notification.object as? [String?], let message = object[0], let deleteSuccessIcon = object[1] else { return }
    // Code here ...
}