gpt4 book ai didi

ios - 使用 NotificationCenter Swift 4.0 不会调用观察者

转载 作者:行者123 更新时间:2023-11-28 15:14:49 33 4
gpt4 key购买 nike

我有两个 ViewController:ViewControllerSecondViewController。我为这两个 ViewController 添加了一个观察者。在 ViewController 中,我还定义了一个 IBAction 来发布通知。我通过两个 ViewController 中的闭包来处理通知。但是只有 ViewController 中的闭包被调用。 SecondViewController 中的闭包(甚至整个代码)没有被调用(我用调试器检查过)。闭包只包含一个打印语句。这是我的代码

//ViewController
import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

let nc = NotificationCenter.default
nc.addObserver(forName: Notification.Name(rawValue:"MyNotification"), object: nil, queue: nil) { (notification) in
print("I'm the : \(type(of: self))")
}
}

@IBAction func sendNotification(_ sender: UIButton) {
let nc = NotificationCenter.default
nc.post(name: Notification.Name(rawValue:"MyNotification"), object: nil, userInfo: ["message":"Hello there!", "Date:":Date()])

}
}

ScondViewController

//SecondViewController
import UIKit

class SecondViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

let nc = NotificationCenter.default
nc.addObserver(forName: Notification.Name(rawValue:"MyNotification"), object: nil, queue: nil) { (notification) in
print("I'm the: \(type(of: self))")
}
}
}

ViewController 中的闭包被调用,但 SecondViewController 中的闭包没有被调用。可能是因为在我发布通知之前 SecondViewController 没有被初始化。但是解决方案会是什么样子呢?感谢您的帮助。

最佳答案

如果这是一对一的关系,您也可以改用委托(delegate)模式。虽然你是对的,但通知观察者还没有被调用,因为你没有在发布之前初始化。因此,不应有理由在 SecondViewController 中调用函数。

因此,如果您只需要更新变量值,您可以在 Variables 类中的其他地方执行此操作,两个 ViewController 都可以访问该类。

关于ios - 使用 NotificationCenter Swift 4.0 不会调用观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47035028/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com