2017-10-12 53 views
0

我在检测错误,例如“realm已经在写入事务中”。我的应用程序使用:如何在同一时间写入Realm的不同对象?

[[RLMRealm defaultRealm] beginWriteTransaction]; 
    [[RLMRealm defaultRealm] addOrUpdateObject:user]; 
    [[RLMRealm defaultRealm] commitWriteTransaction]; 

我在我的应用程序的不同地方使用这种方法。那么,防止这些错误的最佳方法是什么?是可以控制多个写入操作异步?

+0

您是否尝试过使用'[realm transactionWithBlock:^ {realm addOrUpdateObject:user]; }];'而不是? – EpicPandaForce

回答

0

正如您发现的,Realm不允许嵌套写入事务(您在提交或取消前一个事务之前无法启动新的事务)。

避免此问题主要是体系结构设计问题。写入事务不应该做任何事情,除了添加,删除或修改Realm中的对象。您可能希望在注释中使用EpicPandaForce提到的transactionWithBlock:方法,和/或创建辅助方法,这些方法的唯一责任是启动,执行和完成写入事务。

如果您确实需要能够检查Realm是否已处于写入事务中,则可以使用inWriteTransaction属性。但是,如果你需要使用这个属性,几乎在所有情况下,你构建应用程序的方式都是不足的,你应该回头重新考虑为什么你的写事务是如此复杂。