2013-06-30 2 views
1

В моем приложении я сделать что-то вроде этого:RestKit 0.2x: как проверить существование ключевого ресурса перед применением отображения

[itineraryMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"inboundInfo" toKeyPath:@"inboundInfo" withMapping:flightInfoMapping]]; 

но ключ inboundInfo может и не может вернуться с JSON согласно некоторые критерии, я не хочу добавлять целый новый (большой) дескриптор ответа к objectManager, чтобы удовлетворить этот случай, однако есть ли способ проверить, существует ли ключ ключа inboundInfo или нет, перед добавлением сопоставления свойств?

p.s. в случае, если inboundInfo не вернулся с JSON, указанная выше строка сделает сбой, удалив строку, приложение будет в порядке.

EDIT: решается с помощью RKDynamicMapping так:

//configuring the dynamic mapping 
[dynamicMapping setObjectMappingForRepresentationBlock:^RKEntityMapping *(id representation) { 

    if([[representation objectForKey:@"inboundInfo"] isKindOfClass:[NSDictionary class]]) { 
     if(![itineraryMapping.propertyMappings containsObject:inboundInfoMapping]) { //to prevent adding inboundInfoMapping more than once 
      [itineraryMapping addPropertyMapping:inboundInfoMapping]; 
     } 
    } 

    //if inboundInfo is not a dictionary simply return the itineraryMapping without adding inboundInfoMapping on it 
    return itineraryMapping; 

}]; 

ответ

2

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

http://restkit.org/api/latest/Classes/RKDynamicMapping.html

(Динамический раздел Отображение объекта) https://github.com/RestKit/RestKit/wiki/Object-mapping

+1

метод setObjectMapping: whenValueOfKeyPath: isEqualTo устарел в документации, потому что не существует в 0.2x ... – JAHelia

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