RealmSwift - begin/commit 写入

RealmSwift - begin/commit writes

在我的健身追踪器应用程序中,我保存当前 运行 并调用反向地理定位方法,该方法应该获取 运行 发生的位置名称。

首先我将'latestRun'写入realm,然后等待反向地理编码完成并尝试修改'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() 方法。

因为线

realm.beginWrite()

就在

之前
try! realm.write {

他们都做同样的事情,打开一个"writing session"。你应该只保留一个。

注意:如果您删除 beginWrite 行并决定使用闭包变体,请不要忘记同时删除

try! realm.commitWrite()

无需使用 commitWrite()beginWrite()

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

足够