【问题标题】:How to post multiple NSNotification?如何发布多个 NSNotification?
【发布时间】:2016-04-20 02:23:49
【问题描述】:

我目前在 NSTimer 中多次使用 postNotification,但观察者只收到一次。

在不添加多个观察者的情况下多次接收相同通知的方法是什么?

我的计时器是这样创建的:

timer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: #selector(update) , userInfo: nil, repeats: true)

而里面的更新方法是:

let testNotification: NSNotification = NSNotification(name: "testNotification", object: self, userInfo: nil)
    NSNotificationCenter.defaultCenter().postNotification(testNotification)

这就是我在其中一个视图控制器中注册观察者的方式:

override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(testNot), name: "testNotification", object: nil)
    updateView()
}

我像往常一样在视图控制器中添加观察者。

我可以确认计时器工作正常,因为 update() 是定期调用的,并且观察者确实第一次收到通知,但它没有再次发生。

如果您需要查看更多代码,请告诉我。

【问题讨论】:

  • 您需要向我们展示创建计时器的代码和发布通知的代码。
  • 以及注册通知的代码。
  • 你把取消注册视图控制器的方法放在哪里了?也许在 viewDidDisappear 或 testNot 中
  • 我没有。我尝试在 testNot() 中删除并重新添加观察者,但这也不起作用。
  • 这一切发生在一个类还是两个不同的类中?

标签: swift nsnotification


【解决方案1】:

我不知道你的情况如何,但如果是一个屏幕,并且这个屏幕被释放或关闭并且你没有设置删除所有观察者,最喜欢的是生成多个同名观察者,看起来你收到了第一个,之后,分配了另一个,你没有收到,因为他们失去了参考。这应该会有所帮助

【讨论】:

  • 我想接收多个通知,但我只添加了一次观察者。换句话说,我想使用在计时器上设置的相同通知来重复通知。
【解决方案2】:

尝试重新创建 NSNotification 的新对象。

【讨论】:

    【解决方案3】:

    所以,我的 testNot() 函数呈现了一个模态视图,并且不知何故禁止了进一步的通知发布。现在我必须弄清楚如何呈现视图并继续接收通知。警报视图仍然可以正常工作。当收到更多通知时,它会在调试控制台中抛出关于警报视图仍然存在的错误,但一旦警报视图被关闭,一切都会恢复正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多