Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在同一时间编写不同的领域对象?_Ios_Objective C_Database_Realm - Fatal编程技术网

Ios 如何在同一时间编写不同的领域对象?

Ios 如何在同一时间编写不同的领域对象?,ios,objective-c,database,realm,Ios,Objective C,Database,Realm,我正在检测诸如“领域已在写入事务中”之类的错误。我的应用程序使用: [[RLMRealm defaultRealm] beginWriteTransaction]; [[RLMRealm defaultRealm] addOrUpdateObject:user]; [[RLMRealm defaultRealm] commitWriteTransaction]; 我对应用程序不同位置的不同对象使用此方法。那么,防止这些错误的最佳方法是什么?是否可以异步控制多个写入操作?

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

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

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

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

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


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

您是否尝试过使用
[realm transactionWithBlock:^{[realm addor updateobject:user];}]而不是?