2011-10-19 17 views
0

ListエンティティとListAddressエンティティは1対多の関係にあります。リストなしでは、ListAddressは存在してはなりません。リストのアドレス関係から削除されたListAddressをコンテキストから削除したいと思います。それは可能なのですか、それとも手で行う必要がありますか?コアデータ関係から削除されたオブジェクトを削除するように指定できますか?

答えて

3

手作業で行う必要があります。

リスティングが削除された場合、それは簡単です。 Relationship Delete Rulesを参照してください。 「カスケード」に設定すると、関連するオブジェクトが自動的に削除されます。あなたはまだ、もちろんコンテキストに加えられた変更をsaveする必要があります

カスケード

関係先のオブジェクトを削除します。 たとえば、部門を削除すると、その部門のすべての従業員を同時に解雇します。

ただし、リストが削除されない場合は、孤立したListAddressオブジェクトを手動でクリーンアップする必要があります。ここではその問題をカバーする記事のカップルです:

Deletions in a many-to-many structure

Core Data: re-setting to-many relationship

+0

のためにそれを設定することができた場合は、willSave方法でチェックすることができ、私は私のリストを削除すると、それらが呼び出されたと思った - 私は」例えば、私は、そのアドレスの関係を空のNSSetに設定します。 – Simon

+0

申し訳ありませんが私は誤解しました。それをカバーする編集を追加しました。 –

+0

ありがとうございます。私はそれをちょっと微調整したので、質問への直接的な答えです。 – Simon

2

ありますが、関係からそれらを削除すると、エンティティを削除する自動の方法はませんが、あなたは反対のことを行うことができますが、あなたはエンティティを削除することができますあなたがそれらを削除するときの関係から。 ListAddressエンティティでNullify削除ルールを使用します。それでも1行のコードしか必要としません。あなたは、削除ではなく、削除をコーディングします。それが多対多の関係でない限り、それはあなたの目的に合っているはずです。

+0

合意して、エンティティを削除した時点でこれを調べる必要があります。コアデータが関係の完全性を管理するようにします。 –

0

がListingAddressのいずれかの孤立した子であり、いずれかが存在する場合、あなたは削除

override func willSave() { 
    super.willSave() 

    if self.deleted { 
     return 
    } 

    if self.listingInverseRelationship == nil { 
     self.managedObjectContext?.deleteObject(self) 
    } 
    } 
関連する問題