2

myViewControllerをカスタムNSNotificationに登録しようとしています。ビューの階層構造は、次のようになりますNSNotificationは、ビューがUIScrollviewのサブビューであるUIViewControllerで受信されていません。


window 
    - rootViewController.view 
     - scrollView 
      - myViewController.view 

通知がrootViewControllerのビュー内のボタンから[NSNotificationCenter defaultCenter]に送信されています。 rootViewControllerは通知をリッスンし、通知に応答します。

私はmyViewController内に同じ "リスニング"コードを持っていますが、何らかの理由で通知を受け取っていません。アプリの一部であれば通知を受け取るはずですが、正しいのですか?私はmyViewControllerのinitWithNibNameメソッドの中にデバッグメッセージを持っているので、それが通知を購読していることを知っています。私は、通知名をnilに設定することによって、myViewControllerがすべての通知をlistenすることを試みました。例:


NSLog(@"main view controller initialized"); 

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

しかし、そこにも運がありません。このようなことをNSNotificationsで誰も見たことがありますか?

アイデア?

ありがとうございます!

+0

'name:'と 'object:'の両方をnilに設定すると、通常は選択したreceive * all *通知が行われます。また、登録と送信の両方が同じスレッドで行われていることを確認してください。 – DarkDust

+0

UIViewControllerをスクロールビュー内に配置し、UIViewを配置しないのはなぜですか? – Nyx0uf

+0

実際にあなたのオブジェクトに 'statusBarVisibilityChanged:'メソッドがありますか?タイプミスを二度確認してください。 – DarkDust

答えて

4

ビューコントローラが割り当て解除されていると思います。プログラマチックにビューコントローラを作成するときは、ビューコントローラを保持しないことがよくある間違いです。

+0

あなたが最初に答えたので、小切手があなたに与えられました - それが問題でした。スーパービューを持っていたのでVIEWはまだ生きていたと思いますが、myViewController自体はそうではありませんでした。何らかの理由で私は、viewControllerのビューが敷設されていれば、コントローラーも生き続けるだろうと想定していました。ありがとう! – taber

1

観測が正しく設定されていると確信できるのであれば、通知を受け取らないという理由だけでコントローラが割り当て解除されます。

NSNotificationのメカニズムは、ビュー階層もスレッドも依存しません。あなたがオブザーバーとして設定されている(リビング)オブジェクトを持っているなら、それは間違いなく通知を受け取ります。

関連する問題