Apples documentation on -setPrimitiveValue:forKey:
ist auf zwei Arten vage, wenn es verwendet wird, um zu viele Beziehungen zu verwalten.setPrimitiveValue: forKey: und to-many Beziehungen
Zuerst stellen sie fest:
Wenn Sie versuchen, eine n-Beziehung zu einem neuen NSMutableSet Objekt zu setzen, wird es (eventuell) scheitern.
Schließlich ?! Was bedeutet das überhaupt? Wird es später während -[NSManagedObjectContext save:]
scheitern? Wenn ein verwaltetes Objekt in einen Fehler umgewandelt und dann zurückgesendet wird? Wann? Kann ich einen Testfall schreiben, um den Fehler bei Bedarf ständig neu zu erstellen?
Zweitens Beispielcode Bereitstellung richtig, diesen Fall zu behandeln, schreiben sie:
zuerst die vorhandene Set
primitiveValueForKey:
mit bekommen
(sicherzustellen, die Methode nicht nil
zurückkehrt) Was soll ich tun ob/wann die Methode zurückgibt nil? assert()
und sofort fehlschlagen, weil das gesamte Objektdiagramm beschädigt ist und das Speichern zu Datenverlust führt? NSAssert()
darauf als Warnung für den Anrufer, aber drücken Sie auf (stumm nichts zu tun)?
Im Moment bin ich einfach direkt meine Zuordnung NS[Mutable]Set
in diesem Fall erwünscht, etwa so:
- (void)setChildren:(NSSet*)value_ {
NSMutableSet *mutableRelationshipSet = [[[self primitiveValueForKey:@"children"] mutableCopy] autorelease];
if (mutableRelationshipSet) {
[mutableRelationshipSet setSet:value_];
[self setPrimitiveValue:mutableRelationshipSet forKey:@"children"];
} else {
[self setPrimitiveValue:value_ forKey:@"children"];
}
}
Ist das falsch?