7

オブジェクト Car.h があります。Car.h には carparts.h (関係への NSSet) があります。

car.h オブジェクトに属する NSSet のパーツの 1 つを削除する必要があります。

どうすればいいですか?

4

4 に答える 4

18

car.mySetあなたのセットがあれば、次のように試すことができます。

NSMutableSet *mutableSet = [car.mySet mutableCopy];
[mutableSet removeObject:carpartsObject];
car.mySet = [mutableSet copy];
于 2013-01-15T19:54:46.197 に答える
4

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: と同等のアクションを実行します。

于 2013-01-15T22:55:47.980 に答える
0

コア データから 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];
    }
于 2017-08-17T08:14:16.010 に答える
0

対多オブジェクトもオブジェクト ストレージから削除することを確認したい場合 (既定のアクションは、親エンティティを無効にすることです)、次の自動生成メソッドの 1 つをオーバーライドできますCar

- (void)removeCarpartsObject:(Carpart *)value
{
    NSMutableSet *set = [self mutableOrderedSetValueForKey:NSStringFromSelector(@selector(carparts))];

    [set removeObject:value];
    [self.managedObjectContext deleteObject:value];
}
于 2015-06-16T09:58:49.600 に答える