2

我试图将myViewController订阅到自定义的NSNotification。视图层次结构看起来像这样:在UIViewController中没有收到NSNotification,它的视图是UIScrollview的子视图


window 
    - rootViewController.view 
     - scrollView 
      - myViewController.view 

通知正在从RootViewController的的视图内的按钮发送到[NSNotificationCenter defaultCenter]。 rootViewController监听通知并对其做出响应。

我在myViewController中有完全相同的“侦听”代码,但由于某种原因它没有收到通知。如果它是应用程序的一部分,它应该收到通知,对吗?我在myViewController的initWithNibName方法中有一个调试消息,所以我知道它正在订阅通知。我甚至试图通过将通知名称设置为零来让myViewController侦听所有通知。例如:


NSLog(@"main view controller initialized"); 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarVisibilityChanged:) name:nil object:nil]; 

但是也没有运气。有没有人看过类似的事情发生在NSNotifications之前?

任何想法?

谢谢!

+0

将'name:'和'object:'设置为nil通常会让您选择的接收全部*通知,这真的是您想要的吗?另外,您确定注册和发送是在同一个线程上完成的吗? – DarkDust

+0

为什么你把UIViewController放入你的scrollView而不是UIView? – Nyx0uf

+0

你的对象上真的有一个'statusBarVisibilityChanged:'方法吗?仔细检查错别字。 – DarkDust

回答

4

我想视图控制器被释放。在以编程方式创建视图控制器时,不保留视图控制器是一个常见的错误。

+0

给你的支票,因为你先回答 - 这是问题所在。我猜VIEW还活着,因为它有一个超级视图...但myViewController本身不是。出于某种原因,我认为如果viewController的视图正在放置,它会保持控制器的活动。谢谢! – taber

1

如果您确定观察设置正确,我唯一没有收到任何通知的解释是,控制器在发送任何通知之前都会被释放。

NSNotification机制不依赖于视图层次结构和线程。如果你有一个已经设置为观察者的(生物)对象,它肯定会收到通知。

相关问题