我正在尝试在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];
我发现的例子指出了这种确切的配置。我很确定控制器没有被释放,因为它在整个应用程序之后不久就会被使用。
关于我做错的任何想法?
答案 0 :(得分:10)
您的错误消息表明通知正在发送到MasterViewController
类,而不是MasterViewController
实例。您收到错误,因为receiveTestNotification:
是实例方法,而不是类方法。
我认为问题在于您在initialize
方法中注册通知,这是一种类方法,因此该上下文中的self
指的是类本身,而不是实例。 / p>
Here is a very similar previous question其中解决方案是在init
方法中注册通知,这是一种实例方法。