在我的健身追踪器应用程序中,我保存当前运行并调用反向地理定位方法,该方法应该获得运行发生的位置名称。
首先将' latestrn '写入realm,然后等待反向地理编码完成并尝试修改' latestrn '变量
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()
})
}
结果是一个异常
由于未捕获异常'RLMException'而终止应用程序,原因:'TheRealm已处于写事务中'
我做错了什么?我在文档中发现,在这种情况下应该使用beginWrite()
和commitWrite()
方法。
不需要使用commitWrite()
和beginWrite()
try! realm.write {
latestRun.place = place
}
是充分的
这是因为
realm.beginWrite()
在
前面try! realm.write {
它们都做同样的事情,打开一个"写作会话"。你应该只保留一个。
注意:如果你删除beginWrite
行并决定使用闭包变体,不要忘记也删除
try! realm.commitWrite()