2017-06-29 147 views
0

我正在追蹤在生產中發生的崩潰,其中調用indexOfResults引發Object type <my object type> does not match RLMResults type <my object type>。我在他們的github上發現了this issue,2015年的this PR已經解決了這個問題,這意味着我已經有了這個修復。有沒有人從那以後有過體驗,也許有不同的原因?`indexOf`正在投擲「對象類型與RLMResults不匹配」異常

我的情況與上面鏈接的問題發佈者的情況類似 - 傳遞給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 */ 
     } 
    } 
} 

的方法稱爲(從外地)領域中的每個對象上添加了新的對象後:在index(of:)

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() 
    } 
} 

的墜機事件發生。

+0

請張貼一些代碼來顯示您在什麼情況下收到此錯誤。 –

+0

每次添加新對象時,必須更新Realm中對象的__all__似乎是一個不好的解決方案。你確定你不能用內置的鏈接對象來實現相同的功能嗎?使用那些你會擺脫你的功能導致這個問題。 –

+0

(1)我不能,真的。我的具體情況是'refresh'更新持久聊天消息中名爲'isFirstOfDay'和'isLastInGroup'的屬性。這發生在添加或刪除消息時,這可能會使任何現有對象上的這些屬性無效。他們沒有互相鏈接,所以不要認爲這個鏈接適用。過濾器(我在我的例子中留空)非常積極,以確保不會發生不必要的更新。 (2)請解釋如何做到這一點,如果我可以解決問題? –

回答

0

我最好的猜測是refresh()你的對象可以被刪除,這意味着你試圖獲得擴展中的無效對象索引。

以前檢查self.isInvalidated可能是一個好主意,否則如果您有複製案例,請在https://github.com/realm/realm-cocoa/issues處創建問題。