我有一个对象Car.h. Car.h有carparts.h(NSSet为关系)。
我需要删除属于car.h对象的NSSet中的一个部分。
我该怎么做?
答案 0 :(得分:17)
如果您设置了car.mySet
,则可以将其设为,
NSMutableSet *mutableSet = [car.mySet mutableCopy];
[mutableSet removeObject:carpartsObject];
car.mySet = [mutableSet copy];
答案 1 :(得分:4)
我假设Car
是NSManagedObject
的子类,因为你有核心数据标记。
核心数据符合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 />";
}