Änderbare Mengen in NSManagedObjects?

8

Die Standarddeklaration für eine automatisch generierte Eigenschaft NSManagedObject deklariert To-Many-Beziehungen wie folgt:

%Vor%

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.

    
Greg 12.03.2012, 05:26
quelle

2 Antworten

11

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:

%Vor%

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.

>     
lnafziger 15.03.2012, 16:41
quelle
6

Sie sollten es als NSSet behalten und einen der folgenden Schritte ausführen:

  1. Verwenden Sie Schlüsselwertcodierung
  2. Fügen Sie die Core datengenerierten Accessoren hinzu

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.

    
wbyoung 15.03.2012 16:50
quelle