我正在使用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个价值变换器中没有一个成功。}
尽管有警告,我相信这是我想要的 - 但它正在努力映射子对象。它抱怨它在预期属性类型时“得到了一个NSArray”,所以我假设我的属性映射不正确。
这是我的映射:
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注释,它会创建正确数量的子项(并且它们的子项数是正确的),但它们不会被填充。
以下是我试图映射的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
谢谢
答案 0 :(得分:3)
看起来你问题只是这一部分:
[mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"comments.comments"
由于关键路径应为@"comments"
。您不需要向下钻取结构,RestKit将为您执行此操作,因为它导航应用映射的JSON。