swift - RealmSwift 错误 : "RLMException, reason: Collection was mutated while being enumerated."

标签 swift nspredicate enumeration realm

我收到以下错误: “RLMException,原因:集合在枚举时发生了变异。”

当我尝试这样做时出现错误:

let realm = Realm()

let words = realm.objects(Word).filter("ANY collectedSentences.characterCount > 0")

realm.write {
    for word in words {
        word.collectedSentences.removeAll()
    }
}

如果我这样做,我不会收到该错误:

let realm = Realm()
let words = realm.objects(Word)

realm.write {
    for word in words {
        word.collectedSentences.removeAll()
    }
}

我怎样才能像第一个例子那样让程序不必遍历所有单词?

最佳答案

感谢您的澄清。由于 collectedSentences 是一个 Realm List 对象,删除它会使原始查询的结果无效,这就是导致异常的原因。

解决这个问题的一种方法(我以前在自己的应用程序中使用过)是将查询结果的静态副本制作为数组(遗憾的是,这是一个手动过程,您必须循环遍历结果对象,并将每一个添加到数组中)。然后,您可以遍历该数组并删除其中的所有元素,而不会触发突变异常。

关于swift - RealmSwift 错误 : "RLMException, reason: Collection was mutated while being enumerated.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30407636/

相关文章:

ios - 如何在 swift 中从 firebase 中删除子记录?

ios - 如何遍历包含当前骑手 ID 的每个键?

ios - UITableView 自动维度无法正常工作

ios - 使用复杂条件获取数据

java - 如何将覆盖 toString() 的枚举字符串结果转换回枚举?

python - 如何枚举 Python 中的非字符串对象列表?

ios - 来自不同框架的扩展方法的名称冲突

ios - NSPredicate 和自定义 NSObject

ios - NSPredicate可能匹配多个属性

java - 设置枚举的值,并解析字符串以获得枚举