RestKit Mapping对象数组

时间:2017-07-11 18:09:57

标签: objective-c afnetworking restkit nscoding

我正在使用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对象或向其发送无法识别的选择器。       该过程已返回到表达式评估之前的状态。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

意识到我从未在映射中添加正确的关系......我应该做的是:

[animalMapping addAttributeMappingsFromDictionary:@{
  // Other attributes go here, but not favoriteFruits
}];

然后添加以下行:

RKRelationshipMapping *fruitsRelationship = [RKRelationshipMapping relationshipMappingFromKeyPath:@"fruits" toKeyPath:@"favoriteFruits" withMapping:animalMapping];
[candidateMapping addPropertyMapping: fruitsRelationship];