我正在跟踪生产中发生的崩溃,在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:)
。
答案 0 :(得分:0)
我最好的猜测是,refresh()
您的对象被删除后,意味着您正在尝试获取扩展程序中无效对象的索引。
之前检查self.isInvalidated
可能是个好主意,否则,如果您有复制案例,请在https://github.com/realm/realm-cocoa/issues处创建问题。