Ich bin derzeit die folgende Strömung in meiner App:Realm Swift-Entwurfsmuster
- ein UITableViewController: Auflistung Reihen
- ein UIViewController: Details einer geklickt Reihe
- Realm: persistent die Daten
Also die ersten thi ng I ist, Realm
abzufragen und das UITableView
zu bevölkern.
Wenn auf eine Zeile geklickt wird, wird die UIViewController
angezeigt, um weitere Details anzuzeigen, die in meiner zuvor abgefragten Realm Object
enthalten sind. Daher gebe ich das Objekt in der folgenden Art und Weise
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! UIViewController
destinationVC.rowData = selectedRowData
}
wo selectedRowData
ist die Realm Object
zu der ausgewählten Zeile entspricht.
Jetzt, UIViewController
ermöglicht es dem Benutzer, einige Eigenschaften zu aktualisieren, die in meiner Realm
Instanz bei einer Aktion Speichern gespeichert werden müssen. Davon abgesehen ich nicht einfach die Realm Object
auf dem Sprung aktualisieren als
rowData.myCustomProperty = newCustomPropertyUpdatedByTheUser
sonst Realm
löst eine Ausnahme sagen, dass ich versuchte, eine Schreib außerhalb einer Schreibanweisung auszuführen. Offensichtlich möchte ich nicht einen Schreibvorgang zu dieser Zeit durchführen, sonst würde der Wert, wenn der Benutzer die Operation negiert (z. B. durch Zurückgehen an die UITableViewController
), unabhängig gespeichert werden, was schlecht ist.
Ich frage mich dann, was ist die beste Lösung/Muster in diesem Fall verwendet werden, die mich vermeidet Replikation von Code so viel wie möglich macht.
Eine Lösung, die mir in den Sinn kam, ist vorübergehend die Werte in einigen Variablen/struct zu speichern und dann rowData
zu aktualisieren, wenn auf die Schaltfläche Speichern geklickt wird.
Es funktioniert, aber ich persönlich mag diese Lösung nicht, z. Wenn Sie das Datenmodell aktualisieren, müssen Sie die Struktur konsistent halten usw. Wenn Sie also ein besseres Designmuster haben, teilen Sie es bitte mit.
Lesen Sie einfach die Dokumentation und es ist was ich suchte, danke! – r4id4