【问题标题】:Swift NSNotification not working for all ViewControllersSwift NSNotification 不适用于所有 ViewController
【发布时间】:2015-03-08 19:37:04
【问题描述】:

在这个导航控制器应用程序中,我在 TAN ViewController 中有一个按钮,点击该按钮后会发布 NSNotification。

-蓝色(根)视图控制器和绿色视图控制器都在监听同一通知
-Blue ViewController 成功响应通知的到来
- 绿色 ViewController 没有成功响应它。它甚至没有看到它到达(即使我使用与 Blue ViewController 的代码完全相同的代码来注册以侦听此通知。)
- 在这两种情况下,我都在注册以收听viewDidLoad 中的通知:

 override func viewDidLoad() {
    super.viewDidLoad()

    // Set Up Listening to Notification:
    let notificationCenter = NSNotificationCenter.defaultCenter()
    notificationCenter.addObserver(self, selector: "handleNotification:", name:"User Specs Notification", object: nil)
 }

在我访问 TAN ViewController 并从那里发布通知之前,我还要确保访问 GREEN ViewController - 它会自动触发其viewDidLoad 并执行通知侦听代码。但同样,当我回到蓝色/根视图控制器时,我看到它已经正确响应了通知的到来,但是当我然后转到绿色视图控制器时 - 没有任何改变。

有什么想法吗?
我应该在viewDidLoad 以外的地方注册以收听通知吗?如果有,在哪里?为什么它仍然适用于 Blue/Root ViewController - 我 amviewDidLoad 中注册 - 但不在 Green ViewController 中?这其中的逻辑在哪里?

【问题讨论】:

    标签: ios swift uinavigationcontroller nsnotificationcenter viewdidload


    【解决方案1】:

    当您返回蓝色 VC 时,绿色视图控制器被释放。所以它不在那里接收通知。

    【讨论】:

    • 我认为它会一直保留在内存中,直到您真正清除它。因此,如果它被解除分配,你如何让它仍然知道应用程序中其他地方发生的事件/通知?还是您必须完全使用另一种策略?
    • 对于 Storyboard,想法是在 prepareForSeque 方法中为目标 V​​C 提供它所需的所有信息。虽然 VC 可见,但它可以收听通知,但当它不再存在时,它应该取消注册通知 (viewWillDisappear)。
    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多