Die Standarddeklaration für eine automatisch generierte Eigenschaft NSManagedObject
deklariert To-Many-Beziehungen wie folgt:
Wäre es sicher, diese Deklaration in ein NSMutableSet
zu ändern? Würde die CoreData-Komponente weiterhin korrekt funktionieren?
Gemessen an @dynamic
interessiert es wahrscheinlich nicht, ob ich eine NSSet
-Unterklasse anstelle von NSSet
verwende, aber ich möchte nicht viel Code umschreiben, nur um herauszufinden, dass es nicht funktioniert. t arbeiten.
Laut Apples Core Data Programming Guide , dies sollte immer als NSSet deklariert werden.
Wenn Sie einen veränderbaren Proxy (der im Grunde die veränderbare Version des Kerndatensatzes ist und genau gleich funktioniert) verwenden möchten, verwenden Sie die Funktion mutableSetValueForKey
wie folgt:
mutableSomethings
kann dann als Standard NSMutableSet geändert werden und somethings
wird aktualisiert und KVO-Methoden werden entsprechend aufgerufen.
Beachten Sie jedoch, dass viele Funktionen der änderbaren Menge (wie addSomethingsObject
und removeSomethingsObject
) bereits in den Core-Daten-generierten Accessoren enthalten sind, so dass Sie in vielen Fällen den Proxy nicht verwenden müssen.
Sie sollten es als NSSet
behalten und einen der folgenden Schritte ausführen:
Für die Schlüsselwertcodierung greifen Sie wie folgt auf Ihre Sammlung zu:
%Vor%Für von Core Data generierte Accessoren fügen Sie Ihrer Kopfzeile Folgendes hinzu:
%Vor%Sie müssen diese Methoden nicht implementieren (Core Data wird sich darum kümmern), und Sie können sie einfach aufrufen. Dies ist meine bevorzugte Methode zum Behandeln von Sammlungen, da Sie eine bessere Typüberprüfung durch den Compiler erhalten.
Der Grund, warum Sie es nicht in NSMutableSet
ändern sollten, ist, dass die Wahrscheinlichkeit hoch ist, dass Sie Abstürze verursachen und / oder Ihre Änderungen nicht in Ihrem Core Data Store gespeichert werden.
Vielleicht möchten Sie auch in mogenerator nachsehen, um Ihnen beim Erstellen all Ihrer Cocoa-Klassen zu helfen.
Tags und Links objective-c iphone ios core-data ipad