添加UIView作为NSNotificationCenter消息的观察者

时间:2013-12-13 13:44:12

标签: ios nsnotificationcenter

如何添加UIView作为NSNotificationCenter消息的观察者?

我需要在一个View(CustomView1.m)和另一个View(CustomView2.m)之间进行通信。最好不要触及VIewCOntroller中的代码。

以下是我现在正在尝试的方法:

从MyView1.m发布通知

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

在我的MyView2.m中接收通知

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

收到时做某事:

- (void) inviteEmailClosed{
   NSLOG(@"DO SOMETHING HERE");
}

我在xib中定义了UIView,我将它添加到viewcontroller中。

4 个答案:

答案 0 :(得分:0)

在为addObserver:self指定的类中,而不是self,给出应该观察消息的类,或者如果在类中添加了观察者,则使用self是正确的。

编辑:你确定你将nib中的UIView设置为正确的子类MyView2吗?

答案 1 :(得分:0)

您的代码看起来很好 - 这是正确的方法。所以我猜你的问题是什么。

  • 这些代码行是否完全运行?在它们上设置断点并查看。
  • 如果您在xib中定义了UIView,您是否记得将它的类设置为您想要的类而不是将其保留为UIView
  • self是否是您想要添加为观察者的对象(可能是)。
  • 您是否在themeChanged上设置了一个断点并查看它是否正在被调用?
  • @"InviteEmailClosedNotification" 肯定是您的通知名称吗?

希望这些随机的建议有所帮助。

取值

PS使用字符串作为通知名称并不是一个好主意 - 您应该在某处定义它并使用该常量代替。即。

#define InviteEmailClosedNotification @"InviteEmailClosedNotification"

这将停止错别字:)

答案 2 :(得分:0)

从MyView1.m发布通知时 将对象设置为nil。

[[NSNotificationCenter defaultCenter]
     postNotificationName:@"InviteEmailClosedNotification"
     object:nil];

答案 3 :(得分:0)

从ViewController收听而不是视图解决了我的问题,尽管不是100%理想。