2012-06-10 15 views
5

Mam obiekt danych podstawowych i interfejs sieciowy REST, które używają różnych wartości dla tego samego atrybutu. Obiekt zarządzany ma atrybut o nazwie "typ", który jest liczbą całkowitą (wyliczeniem), interfejs REST ma wartość łańcuchową o nazwie "typ" (ciągi takie jak: "ciężarówka", "samochód", "motorower").Jak zmienić wartości atrybutów podczas mapowania do usługi REST za pomocą narzędzia Restkit?

Transformuję wartość z ciągu na liczbę całkowitą podczas pobierania obiektu za pomocą metody RKObjectLoaderDelegate objectLoader:willMapData:. Mam nadzieję, że tak powinienem to zrobić.

Moje pytanie: Podczas umieszczania/księgowania obiektu, w jaki sposób lub gdzie przekształcić wartość z liczby całkowitej (wyliczenia) z powrotem na wartości ciągów? Czy jest moment w procesie serializacji, w którym mogę manipulować wartościami dla akcji "put/post"? Czy powinienem podklasować podklasę serializera lub RKManagedObjectMapping, czy mój delegat jest w pewnym momencie wzywany do zmiany wartości atrybutu?

Odpowiedz

9

Możesz rozwiązać ten problem, tworząc kategorię dla klasy (NSManagedObject), którą mapujesz, i dodając specjalne właściwości w tej kategorii, które będą używane przez Restkit. Dodaj obiekt typeString w kategorii, która konwertuje wyliczenie (typ) na ciąg znaków i zamapuj atrybut "typeString" na json zamiast "type". Wygląda to na przyjmującej:

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

i jak ta do wysyłania:

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

W ten sposób nie trzeba używać objectLoader:willMapData: w ogóle, a konwersja jest ładnie osadzone w obiekcie (Kategoria).

+0

Po prostu niesamowite! Szukałem dobrego rozwiązania - i oto jest. Dzięki. – NDY