iOS KVC DRY-Mutation

Ich versuche, ein Wörterbuch von Zeichenfolgen von einem JSON-Abruf zu einem KVC-kompatiblen NSManagedObject zuzuordnen, ich kann setValue: forKey: erfolgreich verwenden, aber ich kann nicht sehen, wie ich Typen zuordnen kann.

Zum Beispiel sollte ich kein Datum auf irgendeinen zufälligen String setzen können: Ausdruck der Beschreibung von myDate: asdfsadf aber es hat funktioniert.

Ich habe mir https://Stackoverflow.com/a/5345023/828859 angesehen, die einige nützliche Antworten geliefert haben. Ich kann reingehen und eine Validierung für jede einzelne Eigenschaft erstellen ... aber das scheint nicht sehr TROCKEN zu sein, weil ich jedes Datum validieren muss und jedes Mal, wenn ich ein Datum habe, den Wert separat festlegen muss.

Ich würde lieber nach Typ mutieren, bevor ich setValue: forKey: verwende, aber ich weiß nicht, wie ich den Eigenschaftstyp unterscheiden soll.

Was ich machen will; was ich vorhabe zu tun:

switch([object typeforkey:key]){
   case @"NSDate":
   //...
   value = mutatedDate
   //...
}
[object setValue:value forKey:key];
0
hinzugefügt bearbeitet
Ansichten: 1

2 Antworten

Am Ende habe ich ein anderes Wörterbuch für die Zuordnung von Eigenschaftstypen verwendet. Dann überprüft ein Objekt-Zuordnungsobjekt das Objekt, das von diesem bestimmten Protokoll zugeordnet werden soll, und verwendet das Eigenschaftentyp-Wörterbuch, um jede Eigenschaft vor der Verwendung von setValue: forKey: zu konvertieren.

0
hinzugefügt

Sie können ein Objekt fragen, um welche Art von Klasse es instanziiert wurde. So können Sie etwas tun wie:

id myObject = [myDictionary objectForKey:key];

if ([myObject isKindOfClass:[NSDate class]]) {
   //Do stuff
}
else if ([myObject isKindOfClass:[NSString class]]) {
   //Do other stuff
}

Das liegt daran, dass Objekte Strukturen sind, die einen Zeiger mit dem Ivar-Namen isa enthalten, der auf ein Objekt vom Typ Class verweist, sodass Sie ein Objekt immer fragen können, um welche Art von Klasse es sich handelt .

0
hinzugefügt
Richtig, aber ich war nicht klar in meiner Frage, das Wörterbuch stammt aus einer JSON-Antwort, also ein Wörterbuch von Strings.
hinzugefügt der Autor MrJD, Quelle
Ah ich sehe. Ich glaube nicht, dass es einen sauberen Weg gibt, um das zu tun, was Sie wollen. Sie müssen entweder wissen, was die Schlüssel vor der Zeit sind und ihre Typen und den darauf basierenden Objekttyp ändern, oder Sie müssen eine ganze Reihe von Zeichenfolgen scannen, um herauszufinden, woran Sie arbeiten und dann die Validierung.
hinzugefügt der Autor Jack Lawrence, Quelle