简而言之,我正在NSNotification(在ClassA中)注册以下viewDidLoad监听器:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playSong) name:@"playNotification" object:nil];

我有在ClassA.h中声明的选择器:
- (void)playSong:(NSNotification *) notification;

实现方式如下:
- (void)playSong:(NSNotification *) notification {
    NSString *theTitle = [notification object];
    NSLog(@"Play stuff", theTitle);
}

ClassB中(在tableView:didSelectRowAtIndexPath:方法中),我有:
NSInteger row = [indexPath row];
NSString *stuff = [playlistArray objectAtIndex:row];
[[NSNotificationCenter defaultCenter] postNotificationName:@"playNotification" object:stuff];

所有这些都以一条错误消息结尾:



在调用playSong方法之前。

有人可以帮我吗?从一个 Controller 向另一个 Controller 发布通知时,我会忘记什么?

最佳答案

如果要接受参数,您的@selector需要一个:字符:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playSong:) name:@"playNotification" object:nil];
ClassA实例不响应playSong选择器,但它们确实响应playSong:选择器。

10-08 01:35