在NSSet关系中删除对象

时间:2013-01-15 19:51:35

标签: ios core-data

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

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

我该怎么做?

4 个答案:

答案 0 :(得分:17)

如果您设置了car.mySet,则可以将其设为,

NSMutableSet *mutableSet = [car.mySet mutableCopy];
[mutableSet removeObject:carpartsObject];
car.mySet = [mutableSet copy];

答案 1 :(得分:4)

我假设CarNSManagedObject的子类,因为你有核心数据标记。

核心数据符合KVO标准。

Reference here
动态生成的访问者方法

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

关于KVO的命名约定的其他Reference here

要成为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的等效操作:

答案 2 :(得分:0)

如果要确保也从对象存储中删除了多对象(默认操作是使父实体无效),则可以覆盖Car的一个自动生成的方法:

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

    [set removeObject:value];
    [self.managedObjectContext deleteObject:value];
}

答案 3 :(得分:0)

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

foreach($lists['list'] as $listKey=>$listValue){
   $listId = $listValue['id'];
   $listName = $listValue['name'];
   echo"$listKey | $listId : $listName <br />";
}