7

我有一个对象 Car.h。Car.h 有 carparts.h(NSSet 到关系)。

我需要删除 NSSet 中属于 car.h 对象的部分之一。

我该怎么做呢?

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

我假设这Car是一个子类,NSManagedObject因为你有 core-data 标签。

Core Data 符合 KVO。

在此处参考
动态生成的访问器方法

默认情况下,Core Data 为托管对象类的建模属性(属性和关系)动态创建高效的公共和原始 get 和 set 访问器方法。这包括键值编码可变代理方法,例如add<Key>Object:和删除:,如 mutableSetValueForKey 的文档中所述:-托管对象实际上是其所有对多关系的可变代理。

此处有关 KVO 命名约定的 其他参考

为了成为键值编码投诉,mutable unordered to-many relationship您必须实现以下方法:

-add<Key>Object: or -add<Key>:. 必须至少实施其中一种方法。这些类似于 NSMutableSet 方法 addObject:。
-remove<Key>Object: or -remove<Key>:. 必须至少实施其中一种方法。这些类似于 NSMutableSet 方法 removeObject:。
-intersect<Key>:. 选修的。如果基准测试表明性能是一个问题,则实施。它执行 NSSet 方法 intersectSet: 的等效操作。

于 2013-01-15T22:55:47.980 回答
0

如果您想确保也从对象存储中删除一对多对象(默认操作是使父实体无效),您可以覆盖以下自动生成的方法之一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 回答
0

下面是另一种从核心数据中删除 NSSet 中对象的替代方法。我自己尝试过这种方法,它也有效。

    - (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 回答