Aye*_*Aye 7 transactions objective-c realm
该领域已经在写事务中。
如何避免此错误?有没有一种方法可以检查领域是否处于写入牵引状态?如果领域处于写事务中,则先关闭然后执行其他工作。现在,在收到此错误后,“该领域已经在写事务中”。那么与领域相关的其他任务也无法正常工作。
Realm 的经验法则是RLMRealm在任何给定时间只打开一个写入事务。如果您遇到此错误,您可能需要重新考虑您的逻辑。您永远不应该故意尝试RLMRealm在同一个线程上已经打开的事务上打开第二个写入事务。在单独的线程上做这件事很好,但是第二个写事务所在的线程将被阻塞,直到第一个完成。
如果您的实现中存在某些设置不正确的内容,则您假设已完成的事务也可能存在错误并保持打开状态。就像塞巴斯蒂安说的,你可以用 来检查这个-[RLMRealm inWriteTransaction],但在这种情况下,你绝对应该回溯你的代码,看看为什么会发生这种情况。
这是我在github讨论中遇到的一种可能的解决方案:
extension Realm {
public func safeWrite(_ block: (() throws -> Void)) throws {
if isInWriteTransaction {
try block()
} else {
try write(block)
}
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
try! realm.safeWrite{
//your write code goes here
}
Run Code Online (Sandbox Code Playgroud)
现在safeWrite将检查是否有活动的事务,并且将启动一个事务或仅执行传入的代码。