我们正在使用Realm来缓存iOS应用中的ChatMessage对象。我们还使用Realm在我们的应用程序中保留其他一些本地对象。对于聊天消息,当我们从PubNub接收消息时,我们创建一个新的本地ChatMessage对象,并将其写入主队列。对于其他对象写入,我们将它们卸载到非特定的全局队列中并将写入事务放入其中。
目前,我们在编写ChatMessage对象时经常遇到异常,说明事务“已在写入事务中”。我检查了所有地方以确保没有在每个beginWriteTransacdtion / commitWriteTransaction代码中触发beginWriteTransaction的函数。其间的代码主要只是Realm对象的值修改或创建。所以我们完全不知道为什么会发生这个错误。 (它不常见。通常每次使用1-3次。)
来自PubNub的多条消息是否可能(在主队列中)触发多个写入事务导致此问题?或者一些未完成的commitWriteTransaction会导致这种类型的问题(我们还没有检查提交事务错误,我不确定处理Realm错误的最佳方法)?此外,当应用程序进入后台时,任何写入事务都会失败,并导致此类错误吗?
非常感谢你们!
答案 0 :(得分:1)
StackOverflow真的不是这种故障排除建议的最佳位置(发送电子邮件至help@realm.io可以为此提供更好的帮助),但无论如何我都会在这里试一试。
Realm用于检查您是否已经处于写入事务中的代码是dead simple,因此当您获得“已写入事务”异常时,您实际上是在嵌套式写入事务中。< / p>
如果你可以在开发环境中重现这一点,我建议你在Xcode中的所有异常上设置一个符号断点,当抛出这个异常时,向上走回堆栈以查看你可能在哪里开了一个写事务那个没有关闭。
您还可以添加记录文件的断点。调用-[RLMRealm beginWriteTransaction]
或-[RLMRealm writeTransactionWithBlock:]
的行。