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
}
足够
在我的健身追踪器应用程序中,我保存当前 运行 并调用反向地理定位方法,该方法应该获取 运行 发生的位置名称。
首先我将'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
}
足够