2014-02-12 52 views
0

我從隱藏從我viewcontrollers模型的複雜性我的門面類調度通知。 現在,我有一個簡單的標籤欄控制器與第一個選項卡上的導航控制器。到目前爲止,這是一個非常典型的設計。 現在,此導航控制器在其堆棧中有兩個視圖控制器。 根MainViewController用的tableview和DetailViewController有一些看法。NSNotifications的發送表無故被清除。

的mainViewController是用於viewDidLoad中4個通知觀察者。 我對每個通知有四種處理方法。我在dealloc中註銷這些通知。

問題是,當我在mainViewController中選擇一個tableViewCell並將detailViewController推入棧中,然後當我回到主視圖控制器時按下後退按鈕,那時mainViewController作爲觀察者從Notifications Dispatch表格,實際上就像它將取消註冊這些通知一樣。

這是怎麼發生的?是由設計還是我錯過了什麼?

的mainViewController的情況下不被破壞,它仍然存在導航堆棧上的dealloc不叫,那麼爲什麼會註銷?

一個快速和骯髒的解決方案就是把登記的通知viewWillAppear中,但因爲這注冊碼不必要地運行,我不喜歡它很多次(viewDidLoad中應該足夠了。)

任何幫助嗎?

+0

你怎麼確定這一點:「在那一刻的mainViewController被刪除從通知調度表的觀察者」? –

+0

我用火花檢查器。 –

回答

0

[這是一種斜答案的,道歉。]

我猜你不滿意做事的標準蘋果的方式,並試圖找到更好的東西。如果是這樣的話,你並不孤單。

如果你不知道這些,你可能想看看"Model View ViewModel"概念,ReactiveCocoaReactiveViewModel。 ReactiveCocoa可能是一個陡峭的概念性懸崖,但如果您已經冒險,那麼值得一試。