3

我正在尝试在 iOS 应用程序中实现可折叠的表格视图。为此,我在部分标题中设置了一个手势识别器,它将向父控制器触发 NSNotification,然后它将刷新显示展开视图的视图。

一切正常,直到父控制器收到它的消息,这将导致发生以下错误:

'+[MasterViewController receiveTestNotification:]: unrecognized selector sent to class 0xa92a8'

我在这个网站上环顾四周,发现了一些与这个错误有关的帖子,但据我所知,我没有犯这些错误。

我的注册发生在控制器的初始化中,如下所示:

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

我想要调用的接收器方法具有以下签名:

- (void) receiveTestNotification:(NSNotification *) notification

我像这样发送此通知,它位于 UIView 的自定义子类中,我将其用作部分标题:

[[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshNavigation" object:self];

我发现的例子指向了这个确切的配置。我很确定控制器没有被释放,因为它很快就会在整个应用程序中使用。

关于我做错了什么的任何想法?

4

1 回答 1

12

您的错误消息表明通知正在发送到您的MasterViewController班级,而不是MasterViewController实例。您收到错误是因为receiveTestNotification:是实例方法,而不是类方法。

我认为问题在于您正在方法中注册通知initialize,这是一个类方法,因此self在该上下文中指的是类本身,而不是实例。

这是一个非常相似的先前问题,解决方案是在init方法中注册通知,这是一个实例方法。

于 2012-09-12T21:24:15.077 回答