gpt4 book ai didi

ios - 接收通知而不加载 View

转载 作者:行者123 更新时间:2023-11-30 12:38:58 25 4
gpt4 key购买 nike

正如我在 question 中所解释的那样,我试图将数据从 TableView 中的 UISwitch 传递到另一个 ViewController。但是,我希望在关闭“设置 View ”(包含 UISwitch)时传递数据。接下来这个伟大的第三步answer ,我使用 UserDefaults 传递数据,并在关闭“设置 View ”时尝试使用 NotificationCenter 更新 UserDefaults 值。

To update when user defaults values change, you could have your Settings controller post a Notification when dismissing. Then, other VCs in your app could listen for this notification and update as needed.

我尝试在 viewDidLoad 中检索通知,但该值不会刷新,因为关闭设置 View 不会每次都加载新的 ViewController。

每次关闭设置 View 时如何接收/阅读通知?更准确地说,我将在哪里以及如何编写用于读取通知的代码?

<小时/>

以下是发布通知的代码:

class SettingsViewController: UIViewController {

@IBAction func doneButton(_ sender: UIButton) {

self.dismiss(animated: true, completion: nil)
NotificationCenter.default.post(name: Notification.Name("nSound"), object: nil)

}

以下是检索通知的代码:

    class ViewController: UIViewController {

@IBOutlet weak var testLabel: UILabel!
var savedValue = UserDefaults.standard.bool(forKey: "sound")


override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.viewDidLoad), name: Notification.Name("nSound"), object: nil)

//refresh the savedValue variable
savedValue = UserDefaults.standard.bool(forKey: "sound")

//test the savedValue variable
if (savedValue == true) {
testLabel.text = "yes"
} else {
testLabel.text = "no"
}

}

最佳答案

对于此用例,使用通知效果不佳,而且没有必要。我将把开关的值称为 mySetting。

MyViewController(将使用 mySetting 的 View Controller )

  • viewWillAppear(_:) 中的 UserDefaults 读取 mySetting 并使用它

SettingsViewController(包含开关的 View Controller )

  • 从 UserDefaults 中读取 mySetting 并将其分配给 viewWillAppear(_:) 中的开关
  • 当开关上触发 valueChanged 事件时,将 mySetting 写入 UserDefaults

除非您在弹出窗口中显示 SettingsViewController,否则 MyViewController 的 viewWillAppear(_:) 实现将在新加载时以及从任何其他 View Controller 返回时执行。

关于ios - 接收通知而不加载 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494633/

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