`indexOf`抛出“对象类型与RLMResults不匹配”的异常

时间:2017-06-29 09:33:40

标签: ios swift realm

我正在跟踪生产中发生的崩溃,在indexOf上调用Results会引发Object type <my object type> does not match RLMResults type <my object type>。我在他们的github上找到了this issue,这是this PR在2015年提到的,这意味着我已经有了这个修复。从那以后有没有人经历过这种情况,可能有不同的原因?

我的情况类似于上面链接的问题的海报 - 传递给indexOf的实例在那时可能不受领域管理。

编辑:我的代码看起来像

extension MyObject {
   func refresh() {
      let realm = try! Realm()
      realm.refresh()
      let results = realm.objects(MyObject.self)
         .filter( /* some filtering... */)
         .sorted( /* some sorting... */)

      if let ownIndex = results.index(of: self) {
         /* do something */
      }
   }
}

在添加新对象后,在域中的每个对象上调用该方法(来自其他地方):

let realm = try! Realm()
realm.refresh()
try! realm.write {
   // iterate over some data to populate new realm objects from
   for objectData in data {
      let object = MyObject()
      object.populateFields(from: objectData) // Just sets some fields on the object
      realm.add(object, update: true)
   }

   for object in realm.objects(MyObject.self).filter(/* Some filter... */) {
      object.refresh()
   }
}

崩溃发生在index(of:)

1 个答案:

答案 0 :(得分:0)

我最好的猜测是,refresh()您的对象被删除后,意味着您正在尝试获取扩展程序中无效对象的索引。

之前检查self.isInvalidated可能是个好主意,否则,如果您有复制案例,请在https://github.com/realm/realm-cocoa/issues处创建问题。