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機制不依賴於視圖層次結構和線程。如果你有一個已經設置爲觀察者的(生物)對象,它肯定會收到通知。

相關問題