2017-02-04 11 views
0

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.

Antwort

0

Wenn Ihr View-Controller zu diesem Zeitpunkt startet, starten Sie eine Transaktion mit Realm. Wenn Sie die Änderungen speichern und dann diese Transaktion festschreiben möchten, wenn der Benutzer ohne Speichern zu der Datei zurückkehrt, übernehmen Sie die Transaktion nicht.

+0

Lesen Sie einfach die Dokumentation und es ist was ich suchte, danke! – r4id4

Verwandte Themen