2017-06-29 8 views
0

ResultsindexOfを呼び出すと、Object type <my object type> does not match RLMResults type <my object type>がスローされます。彼らのgithubにはthis issueが見つかりましたが、これはすでに2015年にthis PRで解決されました。それ以来誰かが経験したことがありますか、おそらく別の原因がありますか?`indexOf`が「オブジェクトタイプがRLMResultsと一致しません」例外を受け取りました

私の状況は上記の問題のポスターと同様です。indexOfに渡されたインスタンスは、その時点でレルムによって管理されていない可能性があります。

編集:

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:)に発生します。私のコードは、新しいオブジェクトが追加された後の方法は、領域内のすべてのオブジェクトに(他の場所から)と呼ばれている

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 */ 
     } 
    } 
} 

ようになります。

+0

このエラーが発生した状況を示すコードを投稿してください。 –

+0

新しいオブジェクトを追加するたびに、レルム内のオブジェクトの__all__を更新することは悪い解決策のようです。組み込みのリンクオブジェクトを使用して同じ機能を実現できるだけではないのですか?これらを使用すると、この問題の原因となっている機能を取り除くことができます。 –

+0

(1)私は本当にできません。私の特定のケースは、 'refresh'は永続化されたチャットメッセージの' isFirstOfDay'と 'isLastInGroup'と呼ばれるプロパティを更新することです。これは、メッセージが追加または削除されるときに発生し、既存のオブジェクトのいずれかのプロパティを無効にする可能性があります。彼らはお互いにリンクされていないので、リンクが当てはまるとは思わないでください。私の例では空白にしたフィルタは、不必要な更新が発生しないように非常に積極的です。 (2)どうすれば問題を解決できるか説明してください。 –

答えて

0

refresh()の後にあなたのオブジェクトが削除される可能性があります。つまり、あなたの内線に無効なオブジェクトのインデックスを取得しようとしています。

これまではself.isInvalidatedを確認することをお勧めします。それ以外の場合は再生ケースがある場合はhttps://github.com/realm/realm-cocoa/issuesに問題を作成してください。

関連する問題