2014-03-07 28 views
3

我正在使用RestKit来引入可能有子注释的注释(并且这些子可能有子项等)。相同类型的RestKit嵌套对象 - JSON集合错误

我能够深入地0条评论没有问题。我有每个深度0评论的评论对象数组。每个父注释都会填充正确数量的子注释,但是子项内的所有属性均为零(只有深度为0的父项填充了真实数据)。 RestKit给我的警告:

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

此外,每个属性我想在一个映射子,我收到此消息(由属性类型的变化)

Êrestkit.object_mapping:RKMappingOperation.m:在的keyPath“vote_count”的值440无法改造型的表示“的NSNumber”:错误域=组织。 restkit.RKValueTransformers.ErrorDomain代码= 3002“失败的值转换”( )'到NSNumber:没有任何2 va咨询过的鲁伊变压器是成功的。“ UserInfo = 0x8e68280 {detailedErrors =( “Error Domain = org.restkit.RKValueTransformers.ErrorDomain Code = 3002 \”给定的值不是'NSNumber'的实例\“UserInfo = 0x8e681e0 {NSLocalizedDescription =给定值尚未'NSNumber'}“的一个实例,” “错误域= org.restkit.RKValueTransformers.ErrorDomain代码= 3000 \”NSNull类型的预期inputValue,但得到__NSArrayI。\“UserInfo = 0x8e68210 {NSLocalizedDescription =期望inputValue键入NSNull,但得到了__NSArrayI}”),NSLocalizedDescription =的值变换失败 '( )' 到的NSNumber:无参考的2个值变压器的成功}

尽管有这个警告,我相信这是我想要的 - 但它在绘制子对象方面苦苦挣扎。它抱怨说,当它期望属性类型时它“得到了一个N​​SArray”,所以我假设我正在做我的属性映射不正确。

这是我的映射:

+ (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; 
} 

这是我的目标

@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 

我RKResponseDescriptor

RKMapping *mapping = [DNAMappingProvidor dnCommentMapping]; 
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping 
                         method:RKRequestMethodGET 
                        pathPattern:/api/v1/stories/1 
                         keyPath:@"story.comments" 
                        statusCodes:statusCodeSet]; 

您可以在图像中看到,深度0条评论被填充,它创建正确数量的孩子(和他们的孩子数量是正确的),但他们没有填充。

enter image description here

这里是JSON的一个例子,我试图映射

{ 
"story": { 
"badge": "discussion", 
"comment": "THE STORY", 
"comments": [ 
    { 
    "body": "THIS IS MY COMMENT - I GET MAPPED FINE", 
    "body_html": "<p>THIS IS MY COMMENT - I GET MAPPED FINE</p>\n", 
    "comments": [ 
     { 
     "body": "THIS IS MY CHILD RESPONSE - NONE OF MY PROPERTIES GET SET", 
     "body_html": "<p>THIS IS MY CHILD RESPONSE - NONE OF MY PROPERTIES GET SET</p>\n", 
     "comments": [ 
      { 
      "body": "THIS IS MY CHILD'S CHILD RESPONSE - NONE OF MY PROPERTIES GET SET", 
      "body_html": "<p>THIS IS MY CHILD'S CHILD RESPONSE - NONE OF MY PROPERTIES GET SET </p>\n", 
      "comments": [ 

      ], 
      "created_at": "2014-02-17T21:07:13Z", 
      "depth": 2, 
      "id": 41665, 
      "url": "https://www.www.com", 
      "user_display_name": "A M.", 
      "user_id": 201, 
      "user_job": "Job Title", 
      "user_portrait_url": "image.png", 
      "user_url": "user.com", 
      "vote_count": 1 
      } 
     ], 
     "created_at": "2014-02-17T20:50:05Z", 
     "depth": 1, 
     "id": 41655, 
     "url": "https://www.www.com", 
     "user_display_name": "M K.", 
     "user_id": 3517, 
     "user_job": "Job Title", 
     "user_portrait_url": "image.png", 
     "user_url": "user.com", 
     "vote_count": 2 
     } 
    ], 
    "created_at": "2014-02-17T20:14:47Z", 
    "depth": 0, 
    "id": 41649, 
    "url": "www.www.com", 
    "user_display_name": "A M.", 
    "user_id": 201, 
    "user_job": "Job Title", 
    "user_portrait_url": "image.com", 
    "user_url": "user.com", 
    "vote_count": 32 
    }, 

谢谢

回答

3

它看起来像你的问题是眼前这个部分:

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

由于关键路径应该是@"comments"。您不需要深入查看结构,RestKit会为您执行此操作,因为它会在应用映射的JSON中导航。

+0

我知道有一点我只是在“评论”,但一定是与其他(不正确)组合。谢谢,这是一个简单的修复! – enab