2013-01-15 13 views

Odpowiedz

16

Jeśli car.mySet to zestaw, można spróbować go jak

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

idealne! to działa, dziękuję! –

+0

Cieszę się, że mogę Ci pomóc. Dzięki. :) – iDev

2

Jestem zakładając, że Car jest podklasą NSManagedObject skoro masz tag rdzenia danych.

Dane podstawowe są zgodne z KVO.

Reference here
dynamicznie generowanych Accessor Metody

Domyślnie Rdzeń danych dynamicznie tworzy efektywną publiczną i prymitywne pobierania i ustawiania metody dostępowe dla modelowane właściwości (atrybutów i relacji) zarządzanych klas obiektów. Obejmuje to kodowalne, modyfikowalne metody proxy, takie jak add<Key>Object: i usuwa :, jak szczegółowo opisano w dokumentacji dla mutableSetValueForKey: -managed objects są efektywnymi zmiennymi proxy dla wszystkich ich relacji wiele do wielu.

Inne Reference here o nazewnictwo dla KVO

aby mieć klucz-wartość reklamacji kodującą mutable unordered to-many relationship należy wdrożyć następujące metody:

-add<Key>Object: or -add<Key>:. Przynajmniej jedna z tych metod musi zostać zaimplementowana. Są one analogiczne do metody NSMutableSet addObject :.
-remove<Key>Object: or -remove<Key>:. Przynajmniej jedna z tych metod musi zostać zaimplementowana. Są one analogiczne do metody NSMutableSet removeObject :.
-intersect<Key>:. Opcjonalny. Wdrożenie, jeśli analiza porównawcza wskazuje, że wydajność jest problemem. Wykonuje równoważne działanie metody NSSet intersectSet :.

+0

To jest lepsza odpowiedź, a następnie w jednym wierszu: [car removeCarpartsObject: carpartsObject]; – Esteve

0

Jeśli chcesz się upewnić, że obiekt do-wielu jest również usuwany z pamięci obiektu (domyślna akcja jest zniweczyć jednostki nadrzędnej), można zastąpić jeden z generowanych automatycznie metod Car:

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

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

Kolejny alternatywny sposób usuwania obiektu w NSSet z danych podstawowych jest poniżej. Próbowałem tego podejścia samodzielnie i działa również.

- (void)removeCarpartsObject:(Carpart *)value 
    { 
     NSError *error; 
     NSInteger index = [car.mySet.allObjects indexOfObject:carpartsObject]; 

     [self.managedObjectContext deleteObject:car.mySet.allObjects[index]]; 
[self.managedObjectContext save:&error]; 
    } 
Powiązane problemy