Realm Swift报错:写入事务内修改RLMArray仍提示不在事务中
解决Realm中向关联List添加元素时的事务错误
问题背景
在SwiftUI环境下使用MongoDB Realm开发简易待办应用,定义了两个Realm实体:
TaskItem(初始命名为Task)TaskItemGroup(初始命名为TaskGroup)
实体间关联逻辑:
TaskItemGroup通过RealmSwift.List<TaskItem>类型的tasks属性,实现对多个TaskItem的关联TaskItem通过LinkingObjects<TaskItemGroup>建立与所属TaskItemGroup的反向关联
出现的异常:创建并添加TaskItemGroup到Realm的操作正常,但在realm.write事务内向TaskItemGroup的tasks属性添加TaskItem时,持续抛出错误:
Cannot modify managed RLMArray outside of a write transaction.
解决方案
放弃直接操作tasks属性的方式,改为通过Realm对象的动态属性包装器引用(前缀$)来追加元素,代码示例:
// 使用$前缀访问Realm对象的包装器引用,执行追加操作 $m_parent_task_group.append(entry)
可能的原因
该错误通常是因为直接操作的tasks列表引用未处于当前写事务的有效上下文,或是SwiftUI的视图状态更新导致对象实例的管理状态不一致。使用$前缀访问的包装器引用,能确保操作的是Realm当前事务内的受控对象,从而规避事务上下文不匹配的问题。
内容的提问来源于stack exchange,提问作者Byte
相关产品推荐
相关产品推荐

