2012-06-10 2 views
5

Ich habe ein Kerndatenobjekt und eine REST-Webschnittstelle, die für dasselbe Attribut einen anderen Wert verwenden. Das verwaltete Objekt hat das Attribut "type", das eine Ganzzahl (enum) ist, die REST-Schnittstelle hat einen Zeichenfolgenwert namens "type" (Zeichenfolgen wie "truck", "car", "moped").Wie ändere ich Werte von Attributen, wenn ich mit Restkit auf REST mappiere?

Ich transformiere den Wert von String in Integer, wenn das Objekt mithilfe der RKObjectLoaderDelegate-Methode objectLoader:willMapData: abgerufen wird. Ich hoffe, dass ich das so machen soll.

Meine Frage: Wie oder wo transformiere ich den Wert von Integer (enum) zurück in String-Werte? Gibt es einen Moment im Serialisierungsprozess, in dem ich Werte für eine Put/Post-Aktion manipulieren kann? Soll ich den Serializer oder RKManagedObjectMapping von der Unterklasse ableiten, oder wird mein Delegat irgendwann aufgerufen, dass ich die Werte eines Attributs ändern kann?

Antwort

9

Sie können dies lösen, indem Sie eine Kategorie für die Klasse (NSManagedObject) erstellen, die Sie zuordnen, und spezielle Eigenschaften in dieser Kategorie hinzufügen, die von Restkit verwendet werden. Fügen Sie also eine Eigenschaft typeString in der Kategorie hinzu, die die enum (type) in eine Zeichenfolge konvertiert und das Attribut "typeString" an json statt an "type" abbildet. Es sieht aus wie diese für den Empfang:

[mapping mapKeyPath:@"type" toAttribute:@"typeString"] 

und wie diese für das Senden:

[serializationMapping mapKeyPath:@"typeString" toAttribute:@"type"] 

Auf diese Weise brauchen Sie nicht objectLoader:willMapData: überhaupt zu benutzen, und die Umwandlung gut in dem Objekt eingebettet ist (Kategorie).

+0

einfach genial! Viel nach einer schönen Lösung gesucht - und hier ist es. Danke. – NDY

Verwandte Themen