Как правильно использовать RKObjectManager для PUT?

Я работаю с API, который позволяет обновлять объекты с запросами PUT в следующем формате (с завитком):

curl --request PUT -u <api_key>: <api_url> \
-d "attribute=newvalue"

т. е. любые атрибуты связанного объекта (упомянутого в URL-адресе API), которые перечислены в curl, затем обновляются, и возвращается обновленный объект.

Я использую RestKit с сопоставленными объектами, и все отлично работает с GET. Но после обновления атрибутов в сопоставленных объектах я изо всех сил пытаюсь заставить работать метод putObject в RKObjectManager, например:

 [objectManager putObject:<someObject>
               path:path
               parameters:nil
               success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {}
               failure:^(RKObjectRequestOperation *operation, NSError *error) {
                [self.refreshControl endRefreshing];
               }
 ];

Что бы я ни указал в качестве первого параметра - обновленный сопоставленный объект, словарь JSONified, даже просто старая простая строка тела, похоже, возвращает ошибку «Не удалось проанализировать данные запроса, недопустимый JSON» из RestKit. Что я делаю неправильно?


person Echobeko    schedule 04.05.2013    source источник


Ответы (1)


Ваш <someObject> должен быть экземпляром класса из вашей модели данных. Класс должен иметь определенный набор отображений.

Скажем, у вас был класс Person. Вы определяете сопоставление и дескриптор ответа, чтобы RestKit мог преобразовывать загруженный JSON в объекты Person. Теперь вам нужно получить inverseMapping, чтобы определить дескриптор вашего запроса, чтобы RestKit знал, как сериализоваться для загрузки.

Это позволяет RestKit брать ваш <someObject>, сериализовать его в JSON (дескриптор запроса), отправлять его на ваш сервер, а затем получать ответ и отображать эти данные обратно в обновленные объекты (дескриптор ответа).

Посмотрите пример здесь. Он использует словарь для хранения обновленных атрибутов, но принцип тот же. Использование словаря просто упрощает загрузку частичных объектов вместо полных.

person Wain    schedule 04.05.2013