响应描述符具有keyPath的意外值

时间:2014-10-07 18:18:41

标签: ios restkit restkit-0.20 key-value-coding

我有一个响应描述符,它使用keyPath(例如@"rootKey.subKey")映射响应,其中rootKey是字典,subKey是数组。 e.g。

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

但有时我得到以下回复:

{rootKey:@""}

我的应用程序崩溃,但NSString不符合键值'subKey'的键值编码。

任何想法如何处理这种情况?

2 个答案:

答案 0 :(得分:0)

最佳选择,修复JSON。

后备选项,使用dynamic mapping检查已收到的内容并动态创建映射来处理它。

答案 1 :(得分:0)

我处理它的方法是为顶级键创建响应描述符,即@" rootKey",而不是@" rootKey.subKey",并创建了一个顶级键只有一个关系属性的对象" subKeys"。然后我创建了一个基于顶级对象表示的动态映射,要么返回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),但是当我得到一个字符串时,它会优雅地处理响应,而不是键值对象。