Mam obiekt Car.h. Car.h ma carparts.h (NSSet to relationship).Usuń obiekt w relacji NSSet
Potrzebuję usunąć jedną z części w NSSet należącą do obiektu car.h.
Jak to zrobić?
Mam obiekt Car.h. Car.h ma carparts.h (NSSet to relationship).Usuń obiekt w relacji NSSet
Potrzebuję usunąć jedną z części w NSSet należącą do obiektu car.h.
Jak to zrobić?
Jeśli car.mySet
to zestaw, można spróbować go jak
NSMutableSet *mutableSet = [car.mySet mutableCopy];
[mutableSet removeObject:carpartsObject];
car.mySet = [mutableSet copy];
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 :.
To jest lepsza odpowiedź, a następnie w jednym wierszu: [car removeCarpartsObject: carpartsObject]; – Esteve
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];
}
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];
}
idealne! to działa, dziękuję! –
Cieszę się, że mogę Ci pomóc. Dzięki. :) – iDev