正如我在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只需要更新屏幕時的數據。 –