2016-09-20 12 views
4

レルムの削除は信じられないほど文書化されていないようです...または何か不足していますか?どのようにリストからオブジェクトを削除しますか?例はどこですか?レルムのオブジェクトを削除するには?

私はリストを持つオブジェクトAを持っています。 私はリストを持つ別のオブジェクトBを持っています Cは親Aへの参照バックアップを持っています

私はBとそのすべてのサブオブジェクトを削除したいと思います。親コレクションAも同様です。

私は困惑しています...そして、それは信じられないほどのレルムのドキュメントが2つだけの例を提供することを見つける:

try! realm.write { 
    realm.delete(cheeseBook) 
} 
try! realm.write { 
    realm.deleteAll() 
} 

答えて

7

まず第一にバットを、あなたが手動で子供からの参照を実装する必要はありませんバックアップその親にRealmはan inverse relationshipの機能を実装しており、子オブジェクトが自動的にどのオブジェクトに属しているか検索します。

class C: Object { 
    let parent = LinkingObjects(fromType: A.self, property: "c") 
} 

レルムは、カスケードはまだ削除されます(an issue for it hereがあります)ので、それは単にトップレベルのオブジェクトを削除し、そのオブジェクトのListプロパティで任意のオブジェクトも削除されますことを期待するに十分ではありませんサポートしていません。それらのオブジェクトを直接キャプチャしてから、親を削除する前にそれらを手動で削除する必要があります。

let childObjects = b.subObjects 
try! realm.write { 
    realm.delete(childObjects) 
    realm.delete(b) 
} 

(これは動作しますが、そうでない場合は、代わりに通常のスウィフト配列にサブオブジェクトのすべてをコピーし、そこからそれを行う必要があります)

あなたがあからさまObjectを削除する場合は、 Listインスタンスからも削除されるため、Cを削除すると自動的に参照が削除されます。

ご迷惑をおかけしています。私はレルムからオブジェクトを削除することに関する文書がレ​​ビューされ改善されたことを示唆する問題を記録しました。 :)

+2

7ヶ月後にまだ改良がありませんでした:( – imobilizer

+1

これは私たちにとって現時点では重要な機能ではありませんが、この機能を追跡してサポートを追加してください。 ://github.com/realm/realm-cocoa/issues/1186 – TiM

関連する問題