我之前使用过NSNotificationCenter进行应用程序范围的消息传递,但今天我发现了一个奇怪的漏洞。在客户的项目上工作有一些UIView子类需要接收我已经在应用程序中的其他地方发布/接收的NSNotifications。
我从init方法调用addObserver:self并使用#defined常量作为通知名称。当我注册接收的通知被发布时,正在侦听的所有其他对象(所有UIViewController子类)都会获得除我的UIView子类之外的通知。
是否有人在UIView子类中成功使用了NSNotificationCenter?我已经尝试过断点和NSLog,但我的@selector永远不会被调用。
编辑 - 该视图是使用loadNibNamed创建的:并且initWithCoder:未在类中实现。在initWithCoder中注册通知:效果很好。
答案 0 :(得分:5)
确保调用您实现的特定init方法。在您注册通知的位置设置断点,可以让您看到它是否被击中。有时当一个类有多个init方法时,根据它的初始化方式,并不是所有的方法都会被调用。例如,如果您以编程方式创建实例,则UIViewController将调用不同的init方法,如果您从故事板中获取实例,则会调用该实例。
答案 1 :(得分:2)
UIView
子类和NSNotificationCenter
没有任何有趣的事情发生。
很可能您没有将您的实例注册为观察者,或者在发送通知之前未注册该实例。
确保通过在添加观察者的位置设置断点来实际注册UIView。还要在观察者移除时设置断点(dealloc?)以确保视图仍在那里。然后运行应用程序并触发通知。