オブジェクト Car.h があります。Car.h には carparts.h (関係への NSSet) があります。
car.h オブジェクトに属する NSSet のパーツの 1 つを削除する必要があります。
どうすればいいですか?
car.mySet
あなたのセットがあれば、次のように試すことができます。
NSMutableSet *mutableSet = [car.mySet mutableCopy];
[mutableSet removeObject:carpartsObject];
car.mySet = [mutableSet copy];
core-data タグがあるので、これCar
は のサブクラスであると想定しています。NSManagedObject
Core Data は KVO に準拠しています。
ここを参照
動的に生成されるアクセサ メソッド
デフォルトでは、Core Data は、管理対象オブジェクト クラスのモデル化されたプロパティ (属性と関係) に対して、効率的なパブリックおよびプリミティブの get および set アクセサー メソッドを動的に作成します。add<Key>Object:
これには、 mutableSetValueForKey: のドキュメントで詳しく説明されているように、および removes:などのキー値コーディングの可変プロキシ メソッドが含まれます。
その他KVOの命名規則については こちら
のキー値コーディングの苦情になるにはmutable unordered to-many relationship
、次のメソッドを実装する必要があります。
-add<Key>Object: or -add<Key>:
. これらのメソッドの少なくとも 1 つを実装する必要があります。これらは、NSMutableSet メソッドの addObject: に似ています。
-remove<Key>Object: or -remove<Key>:
. これらのメソッドの少なくとも 1 つを実装する必要があります。これらは、NSMutableSet メソッド removeObject: に似ています。
-intersect<Key>:
. オプション。ベンチマークがパフォーマンスに問題があることを示している場合に実装します。これは、NSSet メソッドの intersectSet: と同等のアクションを実行します。
コア データから NSSet のオブジェクトを削除するもう 1 つの方法は、以下を使用することです。私はこのアプローチを自分で試しましたが、それも機能します。
- (void)removeCarpartsObject:(Carpart *)value
{
NSError *error;
NSInteger index = [car.mySet.allObjects indexOfObject:carpartsObject];
[self.managedObjectContext deleteObject:car.mySet.allObjects[index]];
[self.managedObjectContext save:&error];
}
対多オブジェクトもオブジェクト ストレージから削除することを確認したい場合 (既定のアクションは、親エンティティを無効にすることです)、次の自動生成メソッドの 1 つをオーバーライドできますCar
。
- (void)removeCarpartsObject:(Carpart *)value
{
NSMutableSet *set = [self mutableOrderedSetValueForKey:NSStringFromSelector(@selector(carparts))];
[set removeObject:value];
[self.managedObjectContext deleteObject:value];
}