10

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

我的任务是将NSMutableArray通过通知从一个视图发送到另一个视图。有没有可能做

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

然后,在接收器中,我怎样才能得到传递的 myArray. 我正在阅读并且对通知对象的和感到userInfo困惑object

请就这个问题给我建议。

4

4 回答 4

31

AnNSNotification有一个名为userInfothat is an的属性NSDictionaryobject就是NSObject发布NSNotification. _ 所以通常我在设置时使用self,因为发送. 如果您希望通过using an我会执行以下操作:objectNSNotificationselfNSObjectNSNotificationNSArrayNSNotification

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. _

最后,doTheReload:使用以下方法解码数组:

NSArray  *theArray = [[notification userInfo] objectForKey:@"myArray"];

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

于 2012-07-24T15:00:34.870 回答
2

你应该使用userInfo. 它用于您要与通知一起发送的杂项数据。object参数用于触发事件的对象。例如,如果您想监视某个 MPMoviePlayerController(而不是其他),那么您将只注册它的通知(通过object参数)。

于 2012-07-24T14:53:08.850 回答
1

这是非常一致的,因为当您使用该方法发布任何通知时,对象object并且userInfo是。userInfo-postNotificationName:object:userInfo:

是的,您可以通过.NSObjectNSNotificationCenter

于 2012-07-24T14:52:59.000 回答
0

斯威夫特 4,斯威夫特 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 ...
}
于 2020-09-01T06:05:36.923 回答