Wie ich in diesem question erklärt habe, versuche ich Daten von einem UISwitch in einem TableView zu einem anderen ViewController zu übergeben. Ich möchte jedoch, dass die Daten übergeben werden, wenn die Einstellungsansicht (die den UISwitch enthält) geschlossen wird. Nach dem dritten Schritt dieses großen answer benutze ich UserDefaults, um die Daten zu übergeben und zu versuchen, NotificationCenter zu verwenden, um die Werte von UserDefaults zu aktualisieren, wenn die Einstellungsansicht verwarf.Empfangen einer Benachrichtigung ohne Laden der Ansicht
Um zu aktualisieren, wenn Benutzerstandardwerte sich ändern, können Sie Ihren Einstellungscontroller eine Benachrichtigung beim Ablehnen veröffentlichen. Dann könnten andere VCs in Ihrer App auf diese Benachrichtigung warten und sie bei Bedarf aktualisieren.
Ich habe versucht, die Benachrichtigung innerhalb viewDidLoad Abrufen, aber der Wert nicht aktualisiert wird, weil die Einstellungen anzeigen Entlassung nicht geladen den neuen Viewcontroller jedes Mal.
Wie kann ich eine Benachrichtigung erhalten/lesen, wenn die Einstellungsansicht beendet wird? Genauer gesagt, wo und wie würde ich den Code zum Lesen der Benachrichtigung schreiben?
Hier ist der Code für die Benachrichtigung der Veröffentlichung:
class SettingsViewController: UIViewController {
@IBAction func doneButton(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
NotificationCenter.default.post(name: Notification.Name("nSound"), object: nil)
}
der Code Hier ist die Benachrichtigung für das Abrufen:
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"
}
}
Anstatt zu versuchen, Ihren Einstellungscontroller zu erraten, wenn andere VCs eine Benachrichtigung erhalten können, stellen Sie die anderen VCs auffordern, Ihr Datenmodell nach Informationen zu fragen, wenn sie es benötigen. ... 'viewDidAppear' /' viewWillAppear' sind mögliche Kandidaten. –
Bereits versucht, die Benachrichtigung bei viewDidAppear zu erhalten. Aber genauso wie zuvor erscheint oder erscheint die Ansicht nicht jedes Mal. Es ist immer da im Hintergrund. – Gabe12
Ich sagte "fragen Sie Ihr Datenmodell" nicht "Benachrichtigung erhalten". Vermutlich benötigt ein VC nur die Daten an dem Punkt, an dem der Bildschirm aktualisiert wird. –