我正在使用RestKit进行API调用,但我的某个属性未正确映射。
说我有:
// Animal.h
@interface Animal: NSObject
@property (nonatomic, strong) NSArray<Fruit*> favoriteFruits;
@end
实施:
// Animal.h
// This class conforms to NSCoding and correctly implements encodeWithCoder and initWithCoder, no problem
我还有一个类似Fruit
内容的NSCoding
类:
// Fruit.h
@interface Fruit: NSObject
@property (nonatomic, strong) NSString* name;
@end
以下是我设置映射的方法:
[animalMapping addAttributeMappingsFromDictionary:@{
@"fruits": @"favoriteFruits"
}];
当我通过RestKit发出GET请求时,我得到的JSON是这样的:
{
"fruits": [
{
"name": "banana"
},
{
"name: "apple"
}
]
}
请求已成功完成,但是当我检查映射结果时,favoriteFruits
类中Animal
数组中的元素不是我预期的类型Fruit
。它们属于NSDictionary
类型。 NSDictionary
上的值都是正确的...我只需将它们自动转换为Fruit
个对象......
不确定这是否相关,但是当我在调试器中尝试这个时:
(lldb) po ((Fruit*)myAnimal.favoriteFruits[0]).name
我明白了:
错误:执行被中断,原因:尝试取消引用无效的ObjC对象或向其发送无法识别的选择器。 该过程已返回到表达式评估之前的状态。
感谢您的帮助。
答案 0 :(得分:0)
意识到我从未在映射中添加正确的关系......我应该做的是:
[animalMapping addAttributeMappingsFromDictionary:@{
// Other attributes go here, but not favoriteFruits
}];
然后添加以下行:
RKRelationshipMapping *fruitsRelationship = [RKRelationshipMapping relationshipMappingFromKeyPath:@"fruits" toKeyPath:@"favoriteFruits" withMapping:animalMapping];
[candidateMapping addPropertyMapping: fruitsRelationship];