-1

に 2 つのタブがあり、UITabBarController両方を に登録しましNSNotificationCenterた。問題は、非表示のタブ (つまり、まだ呼び出されviewDidAppear:ていない) で通知を受け取れないことです。私の考えでは、画面上にない (つまり、非表示の) コントローラーは に応答しませんNSNotifications。問題ではない別の方法で物事を行うことができますが、他の何かが欠けていて実際に機能しているはずの場合に備えて、非表示のタブが通知を受け取らない理由を確認したいだけです...

編集:

@Fab1nは正しい方向を示してくれました。誤っviewWillDisappear:てオブザーバーを削除していたので、ビューが消えたときに通知を聞いていませんでした。に移動しdeallocます。

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    [notificationCenter removeObserver:self];
}

変更:

- (void)dealloc {
        NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
        [notificationCenter removeObserver:self];
}

とても有難い。

4

2 に答える 2

1

NSNotification安全を確保するには:-initまたは (IB で)に登録してください-initWithNibName:

のプロパティを設定すると、 のコントローラが でUITabbarController初期化されます。initcontrollersUITabbarController

viewWillAppearviewDidAppearタブバー アイコンをタップしてコントローラの 1 つを表示するたびに呼び出されます。

解決:

  1. 「サブ」コントローラーのそれぞれでNSNotificationオーバーライドして登録します-init
  2. 通知の登録を解除します ( ARC で-dealloc呼び出さないでください!!!)[super dealloc]

今、すべてが正常に動作します!

于 2013-04-09T08:22:44.947 に答える