我有一个响应描述符,它使用keyPath(例如@"rootKey.subKey"
)映射响应,其中rootKey是字典,subKey是数组。 e.g。
{rootKey:{subKey:[@"object1", @"object2",...,]}}
但有时我得到以下回复:
{rootKey:@""}
我的应用程序崩溃,但NSString
不符合键值'subKey'的键值编码。
任何想法如何处理这种情况?
答案 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),但是当我得到一个字符串时,它会优雅地处理响应,而不是键值对象。