我如何知道特定交易何时完成?
我希望在交易完成后运行特定的代码块。我怎么能这样做?
我正在以下战争中进行写作 -
Data Source=.\SQLEXPRESS;AttachDbFilename="~/dtbs.mdf";Integrated Security=True;User Instance=True;
答案 0 :(得分:9)
交易是同步执行的。因此,您可以在执行事务后立即执行代码。
我会建议"强制尝试"如果您没有提供任何类型的错误处理,如下所示,如果出现错误则中止。如果磁盘空间不足,则事务将无法恢复。在大多数情况下,您可能希望在交易后的代码中运行,您的数据是持久的,如果出现错误则不适用。此外,如果保持捕获路径完全为空,则不会发现开发中的任何错误。
try! realm.write {
realm.add(<some object>)
}
runMoreCode()
答案 1 :(得分:3)
最好的方法是将该方法编写为Realm
对象的扩展名。
适用于Swift 3 +
extension Realm {
/// Performs actions contained within the given block
/// inside a write transaction with completion block.
///
/// - parameter block: write transaction block
/// - parameter completion: completion executed after transaction block
func write(transaction block: (Void) -> Void, completion: (Void) -> Void) throws {
try write(block)
completion()
}
}
Swift 2.0
extension Realm {
/** Performs actions contained within the given block inside a write transaction with
completion block.
- parameter block: write transaction block
- completion: completion executed after transaction block
*/
func write(@noescape transactionBlock block: Void -> (), completion: Void -> ()) throws {
do {
try write(block)
completion()
} catch {
throw error
}
}
}
现在,您可以像常规write(_:)
方法一样使用扩展程序。
let realm = try! Realm()
let object = SomeObject()
try! realm.write(
transactionBlock: {
realm.add(object)
},
completion: {
print("Write transaction finished")
})