2016-10-13 20 views
0

私は3つのモデル、親、子、孫を持っています。データを正しく保存してリンクすることができました。親を削除すると、子と孫のオブジェクトを削除できるようになりました。nilの特定のプロパティに基づいてオブジェクトを削除する方法

親は子のプロパティを持ち、子は孫のプロパティを持っています。

例:

class Parent: Object { 
    dynamic var name = "" 
    var child = List<Child> 
} 

class Child: Object { 
    dynamic var name = "" 
    dynamic var parent: Parent? 
    var grandChild = List<GrandChild> 
} 

class GrandChild: Object { 
    dynamic var name = "" 
    dynamic var child: Child? 
} 

(これは私の実際のコードではありませんので、私は何にもめちゃくちゃ場合は、ここですべてのエラーを無視してください。)私がやりたい何

が親を削除することですこれはChildオブジェクトの 'parent'のプロパティをnilにします。親プロパティがnilの場合、子オブジェクトを削除したいと思います。そして、grandChildに対しても同じことをします。つまり、オブジェクトのカスケード削除を実行します。オブジェクトの親プロパティ場合

だから、のようなものは、子供がnilである、[オブジェクトを削除します。

これは単純な問題のように思えますが、これらのボード上でRealmのネストされたデータモデルの例を多数見つけることはできません。また、適切な方法で質問することもありません。

+0

私は、カスケード削除のサポート#1104を参照してください。私は機能が追加されるまで回避策を探しています。 –

答えて

0

現在、Realmにカスケード削除がサポートされていないため、手動で子インスタンスを削除する必要があります。 LinkingObjectsを使用すると、親を削除する前にすべての子を削除したり、親が削除された後にparent == nilが削除されたすべての子インスタンスを照会して削除することができます。より多くの可能なソリューションをここに表示してください:https://github.com/realm/realm-cocoa/issues/1186

+0

親がどこにいなくてもオブジェクトを見つけるという2番目の提案は、私が探しているものです。それを行うコードの例は見つけられません。私は述語をよく知っているわけではありません。コード例を教えてください。 –

+0

あなたのソリューションは完全に機能しました。問題だったのは、レルムのフィルタリングに取り組んだのは私の経験がなかったからです。私がしたのは、countertopsToBeDeleted = realm.objects(Countertop.self).filter( "room == nil")でした。 try! realm.write { realm.delete(countertopsToBeDeleted) –

関連する問題