2013-01-15 51 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]; 
    } 
相關問題