【问题标题】:How to write different objects of Realm in same time?如何同时编写Realm的不同对象?
【发布时间】:2017-10-12 10:53:24
【问题描述】:

我正在检测诸如“领域已在写入事务中”之类的错误。我的应用程序使用:

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

我在我的应用程序的不同位置将这些方法用于不同的对象。那么,防止这些错误的最佳方法是什么?是否可以异步控制多个写操作?

【问题讨论】:

  • 你试过用[realm transactionWithBlock:^{ [realm addOrUpdateObject:user]; }];代替吗?

标签: ios objective-c database realm


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多