正如我在question中所解释的,我试图将数据从TableView中的UISwitch传递到另一个ViewController。但是,我希望数据在设置视图(包含UISwitch)被解除时传递。在这个伟大的answer的第三步之后,我使用UserDefaults传递数据并尝试在解除设置视图时使用NotificationCenter更新UserDefaults值。在不加载视图的情况下接收通知
要在用户默认值更改时进行更新,您可以让您的设置控制器在解散时发布通知。然后,您应用中的其他VC可以侦听此通知并根据需要进行更新。
我试着检索里面viewDidLoad中的通知,但由于驳回设置视图不加载新的ViewController每次的价值没有得到刷新。
如何在每次设置视图被解除时接收/读取通知?更确切地说,我在哪里以及如何编写阅读通知的代码?
这里张贴通知的代码:
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"
}
}
与其让您的设置控制器尝试猜测其他VC能够接收通知的时间,如何让其他VC在需要时向您的数据模型询问信息? ...'viewDidAppear' /'viewWillAppear'是可能的候选人。 –
已经尝试在viewDidAppear上接收通知。但就像以前一样,视图不会每次出现或加载。它始终在后台。 – Gabe12
我说“问你的数据模型”不是“收到通知”。据推测,VC只需要更新屏幕时的数据。 –