2012-06-10 8 views
5

Possiedo un oggetto dati principale e un'interfaccia Web REST che utilizzano valori diversi per lo stesso attributo. L'oggetto gestito ha l'attributo "tipo" che è un numero intero (enum), l'interfaccia REST ha un valore stringa chiamato "tipo" (stringhe come: "camion", "auto", "ciclomotore").Come modificare i valori degli attributi quando si esegue il mapping su REST utilizzando Restkit?

Trasformazione il valore da stringa a intero quando si ottiene l'oggetto utilizzando il metodo RKObjectLoaderDelegate objectLoader:willMapData:. Spero che sia così che dovrei farlo.

La mia domanda: quando si inserisce/pubblicando l'oggetto, come o dove si converte il valore dal numero intero (enum) ai valori stringa? C'è un momento nel processo di serializzazione in cui posso manipolare i valori per un'azione put/post? Devo perpasso sottoclasse il serializzatore o RKManagedObjectMapping, o il mio delegato viene chiamato ad un certo punto che posso modificare i valori di un attributo?

risposta

9

È possibile risolvere questo problema creando una categoria per la classe (NSManagedObject) che si sta mappando e aggiungendo proprietà speciali in questa categoria che verranno utilizzate da Restkit. Quindi aggiungi una proprietà typeString nella categoria che converte enum (type) in una stringa e mappa l'attributo "typeString" in json, invece di "type". Ecco come si presenta per la ricezione:

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

e in questo modo per l'invio:

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

In questo modo non è necessario utilizzare objectLoader:willMapData: a tutti, e la conversione è ben incorporato nell'oggetto (categoria).

+0

semplicemente fantastico! Ho cercato molto per una buona soluzione - ed eccola qui. Grazie. – NDY