2013-01-15 50 views

回答

16

如果car.mySet是你的设置,你可以尝试,因为,

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

完美!工作,谢谢! –

+0

很高兴帮助。谢谢。 :) – iDev

2

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

核心数据符合KVO。

Reference here
动态生成的存取方法

默认情况下,核心数据动态创建高效的公共和原始的获取和管理对象类的模型属性(属性和关系)设置访问方法。这包括键值编码可变代理方法,如add<Key>Object:,并删除:,如在mutableSetValueForKey的文档中详细描述的: - 管理对象对于其所有多对多关系都是有效的可变代理。

其他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:的等效操作。

+0

这是更好的响应,然后,在一行中: [car removeCarpartsObject:carpartsObject]; – Esteve

0

如果你想确保一对多对象也从对象存储删除(默认动作是废掉父实体),可以覆盖的Car自动生成的方法之一:

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

    [set removeObject:value]; 
    [self.managedObjectContext deleteObject:value]; 
} 
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]; 
    } 
相关问题