2013-04-09 22 views
-1

我有一個UITabBarController兩個選項卡,我註冊了兩個NSNotificationCenter,我的問題是我沒有收到隱藏選項卡上的通知(即其尚未被稱爲viewDidAppear:)。我的想法是控制器不在屏幕上(即隱藏)不響應NSNotifications。我可以做一些不同的方式,這不是一個問題,但我只是想驗證爲什麼隱藏的標籤沒有得到通知,以防我失去了其他東西,它應該實際上正在工作...隱藏的視圖是否對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]; 
} 

十分讚賞。

+0

您何時註冊並取消註冊通知?你可以顯示該代碼嗎? – jrturton 2013-04-09 08:07:06

+0

我想換個問題「消失的視圖控制器是否響應NSNotifications」? – voromax 2013-04-09 08:18:27

+0

使用viewWillAppear – Rajneesh071 2013-04-09 09:38:12

回答

1

保持安全:填寫您的NSNotification-init或(與IB)-initWithNibName:

當您設置UITabbarControllercontrollers財產UITabbarController的控制器與init初始化。

viewWillAppearviewDidAppear在您每次通過點擊一個標籤欄圖標使其中一個控制器可見時被調用。

解決方案:

  1. 註冊您的NSNotification在每個「sub'控制器
  2. 註銷在-dealloc通知的覆蓋-init(不叫[super dealloc]與ARC !!!)

現在一切正常!

+0

感謝您的有益的職位,非常感謝。 – fuzzygoat 2013-04-09 09:30:43

1

據我所知,任何標籤欄元素是懶惰加載,儘管第一個。第一次點擊表示標籤欄項目時(或通過以編程方式訪問其視圖屬性),它們會加載。之後,即使您選擇了其他選項卡項目,他們也可以收到您想要的任何消息。