【问题标题】:RealmSwift error: "RLMException, reason: Collection was mutated while being enumerated."RealmSwift 错误:“RLMException,原因:集合在枚举时发生了变异。”
【发布时间】:2015-05-23 00:25:41
【问题描述】:

我收到以下错误: “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 是一个列表

标签: swift nspredicate enumeration realm


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-15
    • 2017-11-22
    • 2013-01-29
    • 1970-01-01
    • 2011-03-27
    • 2012-07-30
    • 2014-07-04
    • 2023-03-13
    相关资源
    最近更新 更多