2016-11-03 6 views
0

私のフィットネストラッカーアプリでは、現在の実行を保存し、実行された場所名を取得するはずの逆ジオロケーションメソッドを呼び出します。RealmSwift - 書き込みを開始/コミットします

最初に私が書いた「latestRun」レルムに、そして私が完了して変更しようとする逆ジオコーディングのを待つ「latestRun」変数

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() 

     }) 
    } 

を、それは例外

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

何と結果私は間違っている?私がドキュメントで見つけたのは、この場合にはbeginWrite()commitWrite()のメソッドを使用する必要があるということです。彼らの両方が、 "書き込みセッション" を開いて、同じことを行うだけで

try! realm.write { 

答えて

1

commitWrite()beginWrite()

try! realm.write { 
    latestRun.place = place 
} 
どちらを使用する必要が行を削除しないことを忘れないでください

で十分です

2

それは理由ライン

realm.beginWrite() 

のです。あなたはただ一つだけを保つべきです。

注:beginWrite行を削除し、閉鎖バリアントで行くことに決めた場合も

try! realm.commitWrite() 
+0

私は 'fatal error: 'try!'式は予期せずエラーを発生させました:Error Domain = io.realm Code = 1 "存在しない書き込みトランザクションをコミットできません" – DCDC

+0

これは、 'try! realm.commitWrite() 'それも削除する必要があります。 –

関連する問題