Ich habe ein Objekt Car.h. Car.h hat carparts.h (NSSet zu Beziehung).Objekt in NSSet-Beziehung löschen
Ich muss eines der Teile im NSSet löschen, das zum Objekt car.h gehört.
Wie mache ich das?
Ich habe ein Objekt Car.h. Car.h hat carparts.h (NSSet zu Beziehung).Objekt in NSSet-Beziehung löschen
Ich muss eines der Teile im NSSet löschen, das zum Objekt car.h gehört.
Wie mache ich das?
Wenn car.mySet
Ihr Set ist, können Sie versuchen, es so,
NSMutableSet *mutableSet = [car.mySet mutableCopy];
[mutableSet removeObject:carpartsObject];
car.mySet = [mutableSet copy];
Ich gehe davon aus, dass Car
ist eine Unterklasse von NSManagedObject
, da Sie den Kern-Daten-Tag haben.
Core-Daten sind KVO-konform.
Reference here
dynamisch generierten Zugriffsmethoden
standardmäßig Core Data erstellt dynamisch effiziente öffentliche und primitive get und set-Accessormethoden für modellierten Eigenschaften (Attribute und Beziehungen) der verwalteten Objektklassen. Dazu gehören die Schlüsselwertcodierungs-Mutable-Proxy-Methoden wie add<Key>Object:
und entfernt :, wie in der Dokumentation für mutableSetValueForKey ausführlich beschrieben: -managed Objekte sind effektiv veränderbare Proxys für alle ihre zu viele Beziehungen.
Andere Reference here über Konvention für KVO Benennung
Damit ein mutable unordered to-many relationship
Schlüssel-Wert-Codierung Beschwerde sein, Sie die folgenden Methoden implementieren müssen:
-add<Key>Object: or -add<Key>:
. Mindestens eine dieser Methoden muss implementiert werden. Diese sind analog zur NSMutableSet-Methode addObject :.
-remove<Key>Object: or -remove<Key>:
. Mindestens eine dieser Methoden muss implementiert werden. Diese sind analog zu der NSMutableSet-Methode removeObject :.
-intersect<Key>:
. Wahlweise. Implementieren, wenn das Benchmarking anzeigt, dass Leistung ein Problem darstellt. Es führt die äquivalente Aktion der NSSet-Methode intersectSet: aus.
Dies ist eine bessere Antwort, dann in einer Zeile: [auto removeCarpartsObject: carpartsObject]; – Esteve
Wenn Sie sicher, dass das zu viele machen wollen Objekt auch aus dem Objektspeicher entfernt wird (die Standardaktion ist die Muttergesellschaft zunichte zu machen), können Sie eine der automatisch generierten Methoden der Car
außer Kraft setzen:
- (void)removeCarpartsObject:(Carpart *)value
{
NSMutableSet *set = [self mutableOrderedSetValueForKey:NSStringFromSelector(@selector(carparts))];
[set removeObject:value];
[self.managedObjectContext deleteObject:value];
}
Nur eine weitere alternative Methode zum Löschen von Objekten in NSSet von Core Data verwendet unten. Ich habe es selbst versucht und es funktioniert auch.
- (void)removeCarpartsObject:(Carpart *)value
{
NSError *error;
NSInteger index = [car.mySet.allObjects indexOfObject:carpartsObject];
[self.managedObjectContext deleteObject:car.mySet.allObjects[index]];
[self.managedObjectContext save:&error];
}
perfekt! das funktioniert, danke! –
Ich bin froh zu helfen. Vielen Dank. :) – iDev