2016-11-03 1 views
0

In meiner Fitness-Tracker-App, ich speichere aktuellen Lauf und rufen Sie Reverse Geolocation-Methode, die den Namen des Ortes erhalten soll, wo Lauf stattfand.RealmSwift - Begin/Commit schreibt

Zuerst schreibe ich ‚latestRun‘ zu Reich, dann warte ich auf die umgekehrte Geokodierung zu vervollständigen und versuchen ‚latestRun‘ zu ändern Variable

try! realm.write { 
     realm.add(latestRun) 
    } 

if !savedLocations.isEmpty 
    { 
     ReverseGeocoder.getPlace(latitude: savedLocations[0].latitude, longitude: savedLocations[0].longitude, completionHandler: { 
      place in 
      realm.beginWrite() 
      try! realm.write { 
       latestRun.place = place 

      } 
      try! realm.commitWrite() 

     }) 
    } 

es ergibt sich mit einer Ausnahme

Terminating app due to uncaught exception 'RLMException', reason: 'The Realm is already in a write transaction'

Was mache ich falsch? Was ich in Dokumenten gefunden habe, ist, dass beginWrite() und commitWrite() Methoden in diesem Fall verwendet werden sollten.

Antwort

1

Keine Notwendigkeit zu löschen vergessen verwenden weder commitWrite() noch beginWrite()

try! realm.write { 
    latestRun.place = place 
} 

ist ausreichend

2

Es ist wegen der Linie

realm.beginWrite() 

kurz vor

try! realm.write { 

Sie beide das gleiche tun, ein "Schreib-Session" zu öffnen. Du solltest nur einen behalten.

Hinweis: Wenn Sie die beginWrite Zeilen löschen und entscheiden, mit der Verschlussvariante gehen nicht auch der Linie

try! realm.commitWrite() 
+0

jetzt habe ich 'fataler Fehler: 'versuchen!' Ausdruck hat unerwartet einen Fehler ausgelöst: Fehler Domain = io.realm Code = 1 "Kann eine nicht existierende Schreibtransaktion nicht committen" ' – DCDC

+0

Das liegt daran, dass Sie die Zeile" try! " realm.commitWrite() '. Sie sollten es auch löschen. –

Verwandte Themen