2015-10-14 49 views
0

我正在使用NSNotificationCenter來設置一個變量共享,當3個TableViewControllers(所有從同一類中分類)的通知進來時共享一個變量。NSNotificationCenter重新執行通知

所有作品,除了以下情形罰款:

用戶在主視圖(即實際處理/視圖響應通知)時,應用程序轉到後臺(例如,用戶按下Home鍵)。如果有通知進入,並且用戶從圖標或警報中啓動應用程序,則應用程序的行爲就好像它不僅需要處理最後一個通知,而且還需要處理所有通知。

例如:讓;我們假設應用程序已經處理了5個通知。該應用程序移動到背景,然後通知進來。用戶從圖標啓動應用程序移動到前臺的應用程序。該應用將觸發每個通知1個動作。

如果用戶在應用程序移至背景之前處於任何其他屏幕中,情況並非如此。但是,如果用戶移動到主視圖,通知已處理並且應用程序再次移至後臺,則在下一次通知時,應用程序將處理7個通知(我們的前5個+ +1個當前)。

雖然從概念上來說,好像我的應用程序正在產生n個觀察者,但我不清楚爲什麼。我在基類viewWillAppear中設置了一個觀察者,並在viewWillDisappear(也嘗試了一個deinit塊 - 在行爲上沒有改變)中刪除。

任何想法爲什麼觀察者累積所有通知?這是觀察者的正常行爲嗎?如果是這樣,我該如何刪除「觀察和處理」的消息?

+0

我的印象是,它會幫助很多,如果你也發佈一些代碼+日誌 –

+0

嘗試兩件事:1.使用特定的removeObserver(作爲反對刪除所有)。 2.在addObserver之前調用removeObserver。 3.添加一個UIApplicationWillResignActiveNotification觀察者,允許我在應用移動到背景時刪除觀察者。 – goggelj

+0

在您的應用程序的某個位置刪除通知觀察者。 – SahandTheGreat

回答

0

我的問題的解決方案是添加它之前刪除觀察者。

問題本身歸結爲這樣一個事實,即清理順序(即在viewWillAppear中添加觀察者,移除觀察者視圖將會消失)與我的預期不符。結果是觀察者被一次又一次地添加,但相應的「刪除」實際上並未「發生」。

我想這是由於添加/刪除觀察者發生在基類(而不是子類)的事實。