У меня есть дескриптор ответа, который отображает ответ с помощью keyPath, такого как @"rootKey.subKey"
, где rootKey - словарь, а subKey - массив. например
{rootKey:{subKey:[@"object1", @"object2",...,]}}
Но иногда я получаю такой ответ:
{rootKey:@""}
И мое приложение вылетает за исключением того, что NSString
не соответствует кодированию ключевого значения для ключа subKey.
Есть идеи, как я могу справиться с такими ситуациями?
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), но корректно обрабатывает ответ, когда вместо объекта «ключ-значение» я получаю строку.
Лучший вариант, исправить JSON.
Альтернативный вариант: используйте динамическое сопоставление, чтобы проверить, что было получено, и создать сопоставление. на лету, чтобы справиться с этим.
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.