我可以通过使用协议和委托来做到这一点,但我想尝试使用NSNotification
我的任务是通过一个视图向另一个视图发送NSMutableArray
通知。是否可以
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:myArray];
然后,在接收器中,我如何获得传递的myArray。我正在阅读并对通知对象的userInfo
和object
感到困惑。
请就此问题向我提出建议。
答案 0 :(得分:30)
NSNotification
有一个名为userInfo
的属性NSDictionary
。 object
是发布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 ...
}