2015-12-01 134 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

相关问题