2011-11-09 10 views
2

コアデータ(複数の関係)によって自動的に作成されたNSSetをプログラムで空にする必要がある場合、どうすればよいですか?このようなもの ?コアデータNSSetを空にする(複数の関係)

[self willChangeValueForKey:@"MyRelationship"]; 

[[self MyRelationship] release]; 
[self MyRelationship] = [NSSet alloc] init]; 

[self didChangeValueForKey:@"MyRelationship"]; 

ないそれがすべて正しいことを確認...何らかの理由で おかげ

答えて

6
[[self mutableSetValueForKey:@"MyRelationship"] removeAllObjects]; 

、私は「カスケード」は動作するようにルールを削除取得することはできませんので、私は、オブジェクトが削除したいとき同様にセット全体を反復して[self.managedObjectContext deleteObject:obj]を呼び出す必要があります。そうしないと、関係が必要なものとして定義されていると、検証エラーが発生します。

+0

おかげで最後のコメントがたくさん助け – aneuryzm

1

パトリックは、

関係は、コアデータに、当然、特別です。それらは、それらのリレーションからオブジェクトを削除するための特殊なメソッドを提供します。アクセサーをオーバーライドするのではなく、それらのメソッドを使用する必要があります。このスニペットのように:

[self removeMyRelationship: self.myRelationship];

私はまた、あなたがあなたのオーバーライドされたアクセサメソッドを削除するべきだと思います。

あなたの削除の問題についての洞察はありません。グループ全体を繰り返し、オブジェクトを削除することをお勧めします。あなたの列挙子があなたの関係のコピーであることが重要だと思います。次ARCのコードのように:

for (Relation *r in [self.myRelationship copy]) { 

    [moc deleteObject: r]; 
} 

アンドリュー

関連する問題