RealmSwift错误:“RLMException,原因:收集在枚举时发生了变异。”

时间:2015-05-23 00:25:41

标签: 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()
    }
}

我怎样才能做第一个例子,所以程序不需要翻阅所有单词?

1 个答案:

答案 0 :(得分:3)

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

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