RestKit相同类型的嵌套对象 - JSON集合错误

时间:2014-03-07 02:30:44

标签: ios objective-c json restkit

我正在使用RestKit来提取可能有孩子评论的评论(这些孩子可能有孩子等)。

我能够毫无问题地提取深度0评论。我为每个深度0注释都有一个注释对象数组。每个父注释都会填充正确数量的子注释,但子项中的所有属性都是nil(只有深度0父项用实际数据填充)。 RestKit给了我警告:

  

W restkit.object_mapping:RKMappingOperation.m:645警告:检测到包含其他集合的集合的关系映射。这可能不是你想要的。考虑使用KVC集合运算符(例如@unionOfArrays)来展平您的可映射集合。
  W restkit.object_mapping:RKMappingOperation.m:646关键路径'comments.comments'产生的集合包含另一个集合而不是一组对象:

此外,对于我想要在孩子中映射的每个属性,我收到此消息(按属性类型更改)

  

E restkit.object_mapping:RKMappingOperation.m:440将keyPath'invest_count'的值转换为类型'NSNumber'的表示失败:Error Domain = org.restkit.RKValueTransformers.ErrorDomain Code = 3002“值转换失败”(   )'到NSNumber:咨询的2个值变换器中没有一个成功。“UserInfo = 0x8e68280 {detailedErrors =(       “Error Domain = org.restkit.RKValueTransformers.ErrorDomain Code = 3002 \”给定值不是'NSNumber'的实例\“UserInfo = 0x8e681e0 {NSLocalizedDescription =给定的值不是'NSNumber'}的实例” ,       “Error Domain = org.restkit.RKValueTransformers.ErrorDomain Code = 3000 \”期望类型为inputValue的{​​{1}},但得到NSNull。\“UserInfo = 0x8e68210 {NSLocalizedDescription = Expected a类型为__NSArrayI的{​​{1}},但获得了inputValue。}“),NSLocalizedDescription =值转换失败'(   )'对NSNumber:咨询的2个价值变换器中没有一个成功。}

尽管有警告,我相信这是我想要的 - 但它正在努力映射子对象。它抱怨它在预期属性类型时“得到了一个N​​SArray”,所以我假设我的属性映射不正确。

这是我的映射:

NSNull

这是我的对象

__NSArrayI

我的RKResponseDescriptor

+ (RKMapping *) dnCommentMapping {
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[DNComment class]];
[mapping addAttributeMappingsFromDictionary:@{
                                              @"id": @"commentId",
                                              @"body": @"body",
                                              @"body_html": @"bodyHTML",
                                              @"created_at": @"createdAt",
                                              @"depth": @"depth",
                                              @"vote_count": @"voteCount",
                                              @"user_id": @"userID",
                                              @"user_display_name": @"userDisplayName",
                                              }];
[mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"comments.comments"
                                                                        toKeyPath:@"comments"
                                                                      withMapping:mapping]];

return mapping;
}

您可以在图像中看到填充了深度0注释,它会创建正确数量的子项(并且它们的子项数是正确的),但它们不会被填充。

enter image description here

以下是我试图映射的JSON的示例

@interface DNComment : NSObject
@property (nonatomic, assign) NSInteger commentId;
@property (nonatomic, copy) NSString *body;
@property (nonatomic, copy) NSString *bodyHTML;
@property (nonatomic, copy) NSDate *created_at;
@property (nonatomic, assign) NSInteger depth;
@property (nonatomic, assign) NSInteger voteCount;
@property (nonatomic, copy) NSDate *createdAt;
@property (nonatomic, assign) NSInteger userID;
@property (nonatomic, copy) NSString *userDisplayName;
@property (nonatomic, strong) NSArray *comments;
@end

谢谢

1 个答案:

答案 0 :(得分:3)

看起来你问题只是这一部分:

[mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"comments.comments"

由于关键路径应为@"comments"。您不需要向下钻取结构,RestKit将为您执行此操作,因为它导航应用映射的JSON。