#objective-c #ios #post #wcf-data-services #restkit
#objective-c #iOS #Публикация #wcf-службы обработки данных #restkit
Вопрос:
Я использую RestKit для подключения к нашим службам передачи данных WCF.
У меня возникли проблемы с добавлением объекта с использованием функции postObject RKObjectManager из-за проблем с отображением ответов.
Когда объект добавляется, службы обработки данных WCF возвращают код состояния 201 и вновь добавленный объект (в качестве ответа).
Можно ли проигнорировать ответ и просто использовать возвращенный код состояния, чтобы проверить, удалось ли добавить?
Ponnu
Ответ №1:
Почему вы хотите игнорировать недавно добавленный объект, возвращенный с сервера? Сопоставление этого результата полезно для синхронизации вашего локального представления с серверным. Возможно, сервер перезаписал какое-то поле вашего объекта, например идентификатор объекта, и вы хотите отслеживать его.
Если у вас ошибка сопоставления, это, вероятно, потому, что ответ на действие POST возвращает представление вашего объекта, которое отличается от того, которое возвращается с помощью GET . Вы пробовали использовать:
- (RKObjectLoader*)postObject:(id<NSObject>)object mapResponseWith:(RKObjectMapping*)objectMapping delegate:(id<RKObjectLoaderDelegate>)delegate
вместо этого и указать более подходящее сопоставление для возвращаемых данных?
Ответ №2:
Проблема здесь может заключаться в изменении службы REST, поэтому вместо этого простым решением было бы игнорировать обратный вызов didFailWithError в случае вызовов postObject для определенного пути к ресурсам.
- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error {
if ([objectLoader wasSentToResourcePath:@"/rest/api/returns/201" method:RKRequestMethodPOST] amp;amp; [[objectLoader response] statusCode]==201) {
NSLog(@"Object created");
} else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Communication error"
message:[NSString stringWithFormat:@"Received status code %d: %@", objectLoader.response.statusCode, error.localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
Ответ №3:
Создайте тривиальный RKObjectMapping, который не заботится ни о каких параметрах в ответе.
[RKObjectMapping mappingForClass: [NSNull class]];