2015-12-01 59 views
0

我想張貼通知如下:NSNotificationCenter觀察者不起作用

NSNotificationCenter .defaultCenter() .postNotificationName("name", object: nil) 

從viewControllerA

的函數內

然後在ViewControllerB在viewDidLoad

NSNotificationCenter.defaultCenter().addObserver(self, selector: "doSomething:", name:"name", object: nil) 

但從來沒有叫過doSomething:

有什麼想法?

+2

您需要先'addObserver',然後'postNotificationName'。 – Leo

+0

@Leo對不起,我不明白。我在哪裏應該addObserver(在我的ViewControllerA?,然後在相同的ViewControllerA postNotification? –

+1

我的意思是你發佈通知時,應該已經有一個觀察者在內存中 – Leo

回答

3

下面是兩個控制器中的代碼應該是什麼樣的。

在訂閱/聽的ViewController

func viewDidLoad() { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "doSomething:", name: "name", object: nil) 
} 

func doSomething(notification: NSNotification) { 
    print("Notification was posted.") 
} 

在發佈/發佈的ViewController

func viewDidLoad() { 
    NSNotificationCenter.defaultCenter().postNotificationName("name", object: nil) 
} 

如果它不工作,它可能是由於你的應用程序的體系結構:

  • 這兩個ViewControllers當前是否加載到內存中?
  • 在通知發送之前是否添加了觀察者?
+0

這正是我如何擁有它,但顯然觀察員沒有加載之前張貼...這將是一個問題,因爲我的viewControllerB只在我想發送帖子後生機......不知道如何處理這個 –

+3

NSNotification可能並不是您想要實現的機制,爲什麼不在適當的時間繼續使用ViewControllerB(並且通過它需要一些對象/值)而不是發送通知? – siburb

+0

您需要重新構建您的架構,使得兩者視圖控制器在內存中,或者創建一些連接這兩者的類並執行需要執行的任何任務。沒有更多的信息,就很難提供建議。 由於您的主要問題已得到解答,請隨時將答案標記爲*正確*,以便將來本文的訪問者可以從此對話中受益。 隨時回覆更多信息,或者發佈有關SO的其他問題,以獲得幫助解決您擁有的體系結構問題。 – ArtSabintsev

相關問題