如何添加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中。
答案 0 :(得分:0)
在为addObserver:self
指定的类中,而不是self,给出应该观察消息的类,或者如果在类中添加了观察者,则使用self是正确的。
编辑:你确定你将nib中的UIView设置为正确的子类MyView2吗?
答案 1 :(得分:0)
您的代码看起来很好 - 这是正确的方法。所以我猜你的问题是什么。
UIView
,您是否记得将它的类设置为您想要的类而不是将其保留为UIView
?self
是否是您想要添加为观察者的对象(可能是)。themeChanged
上设置了一个断点并查看它是否正在被调用?@"InviteEmailClosedNotification"
肯定是您的通知名称吗?希望这些随机的建议有所帮助。
取值
PS使用字符串作为通知名称并不是一个好主意 - 您应该在某处定义它并使用该常量代替。即。
#define InviteEmailClosedNotification @"InviteEmailClosedNotification"
这将停止错别字:)
答案 2 :(得分:0)
从MyView1.m发布通知时 将对象设置为nil。
[[NSNotificationCenter defaultCenter]
postNotificationName:@"InviteEmailClosedNotification"
object:nil];
答案 3 :(得分:0)
从ViewController收听而不是视图解决了我的问题,尽管不是100%理想。