Objective c 域已在写入事务中

Objective c 域已在写入事务中,objective-c,transactions,realm,Objective C,Transactions,Realm,域已在写入事务中 如何避免这个错误?有没有办法检查域是否处于写入牵引状态?若领域在写事务中,则首先关闭,然后执行其他工作。现在,在收到此错误“域已处于写入事务中”后,与域连接的其他任务也不工作。如果您在同一线程中执行某些写入任务,可以将它们添加到NSMutableArray,然后使用添加或更新对象romarray。另一方面,您可以通过在realm对象上触发inWriteTransaction来检查以避免写入冲突。realm的经验法则是在任何给定时间,RLMRealm上只打开一个写入事务。如果遇到

域已在写入事务中


如何避免这个错误?有没有办法检查域是否处于写入牵引状态?若领域在写事务中,则首先关闭,然后执行其他工作。现在,在收到此错误“域已处于写入事务中”后,与域连接的其他任务也不工作。

如果您在同一线程中执行某些写入任务,可以将它们添加到
NSMutableArray
,然后使用
添加或更新对象romarray
。另一方面,您可以通过在realm对象上触发
inWriteTransaction
来检查以避免写入冲突。

realm的经验法则是在任何给定时间,
RLMRealm
上只打开一个写入事务。如果遇到此错误,您可能需要重新考虑您的逻辑。您不应该故意尝试在已在同一线程上打开的
RLMRealm
上打开第二个写事务。在单独的线程上执行该操作是可以的,但是第二个写事务所在的线程将被阻塞,直到第一个写事务完成


如果您的实现中存在一些设置不正确的地方,那么您认为已完成的事务也可能有错误,并没有打开。正如Sebastian所说,您可以使用
-[RLMRealm inWriteTransaction]
检查这一点,但在这种情况下,您肯定应该回溯您的代码以了解发生这种情况的原因。

我在中遇到了一个可能的解决方案:

像这样使用它:

try! realm.safeWrite{
    //your write code goes here
}

现在,
safeWrite
将检查是否有活动的事务,并将启动一个事务或只是执行传入的代码。

我不知道为什么标准领域库中没有这个。它是如此明显的包含。干得好!我可能很密集,但是try block()完成了什么?block是传递给要执行的方法的一段代码。因此,从技术上来说,这是检查写入块是否已经在进行中,如果已经在进行,那么您传入的代码将在该写入过程中执行,如果没有,那么它将打开一个新的写入并执行您传递的代码。如果代码使用现有的写入事务,是否保证完成?@gregm在这两种情况下,代码段都执行“block”-在闭包中定义的代码。在一种情况下,它被直接调用,而在另一种情况下,它被传递给“write”,后者在内部启动写事务,执行“block”,然后完成事务。当涉及到执行“块”时,基本上这两种情况下的流保持不变,并且“块”将在代码完成后立即完成。希望这能澄清一点,并回答您的问题。
try! realm.safeWrite{
    //your write code goes here
}