2014-09-03 2 views
0

Я пытаюсь ответить на ошибку карты от сервера xml. В версии 0.21 restkit он работал нормально. В последней версии это не было (0,22 и выше). Возможный ответ от сервера: <authorization-fail/>. Многие серверные функции могут привести к этому ответу.Объект mapper для xml в RestKit

+ (void)addAuthErrorMapping:(RKObjectManager*)objectManager 
{ 
    RKObjectMapping* errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]]; 
    [errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil 
                      toKeyPath:@"errorMessage"]]; 

    RKResponseDescriptor* errorResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping 
              method:RKRequestMethodGET 
             pathPattern:nil 
              keyPath:@"authorization-fail" 
             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

    [objectManager addResponseDescriptor:errorResponseDescriptor]; 
} 

В 0.21 версии я получаю словарь с authorisation-fail ключом. В последних версиях результат - пустой словарь.

+0

Будьте конкретны относительно версии, которая сработала и не работает. Что он делает вместо этого? Возможно, вы захотите поднять ошибку (с образцом кода) на github. – Wain

+0

Обновлен мой вопрос. Проблема также была заполнена на github. – Sol

ответ

0

Это никогда не должно было работать.

Сервер должен возвращать вам ответ с кодом ответа не 2xx HTTP, и вы должны использовать этот код для запуска дескриптора ответа.

Как бы то ни было, вы все время запускаете дескриптор ответа и говорите ему, чтобы он искал - и сверлить в - authorisation-fail. Итак, если этот ключ существует, но он пуст, вы должны получить RKErrorMessage, который пуст.

Если у вас есть другой дескриптор ответа, который соответствует ответу до этого (т. Е. Любой другой с шаблоном пути nil и кодом ответа на успех), то этот никогда не будет работать, и именно поэтому вы получаете пустой словарь.

Таким образом, лучшим вариантом является изменение ответа сервера, и обходным решением является использование динамического сопоставления, которое проверяет содержимое и обеспечивает либо хороший ответ, либо сопоставление ошибок, которое будет использоваться.

Смежные вопросы