У меня есть дескриптор ответа, который отображает ответ с помощью keyPath, такого как @"rootKey.subKey", где rootKey - словарь, а subKey - массив. например

{rootKey:{subKey:[@"object1", @"object2",...,]}}

Но иногда я получаю такой ответ:

{rootKey:@""}

И мое приложение вылетает за исключением того, что NSString не соответствует кодированию ключевого значения для ключа subKey.

Есть идеи, как я могу справиться с такими ситуациями?

0
Shuaib 7 Окт 2014 в 22:18

2 ответа

Лучший ответ

Я сделал это так, чтобы создать дескриптор ответа для ключа верхнего уровня, то есть @ "rootKey" вместо @ "rootKey.subKey", и создать объект верхнего уровня, который имеет только одно свойство отношения "subKeys". Затем я создал динамическое сопоставление, которое на основе представления объектов верхнего уровня либо возвращает сопоставление для подключенных ключей, либо nil:

RKEntityMapping *responseMapping = [RKEntityMapping mappingForEntityForName:@"RootObject" inManagedObjectStore:managedObjectStore];
[responseMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"subKeys" toKeyPath:@"subKeys" withMapping:subKeysMapping]];

RKDynamicMapping* dynamicMapping = [RKDynamicMapping new];
[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
    if ([representation isKindOfClass:[NSDictionary class]]) {
        return responseMapping;
    }
    return nil;
}];

return dynamicMapping;

Это приводит к появлению ненужного объекта верхнего уровня (RootObject), но корректно обрабатывает ответ, когда вместо объекта «ключ-значение» я получаю строку.

0
Shuaib 9 Окт 2014 в 09:37

Лучший вариант, исправить JSON.

Альтернативный вариант: используйте динамическое сопоставление, чтобы проверить, что было получено, и создать сопоставление. на лету, чтобы справиться с этим.

0
Wain 7 Окт 2014 в 18:22