2013-08-01 376 views
2

我试图映射来自所述服务器具有2个属性的响应:对象映射Restkit不映射嵌套对象

  • 那就是OBJETS阵列
  • 一个在计数的Number数组用户objets,我已经在其他类中映射。

这是我怎么有类模型:

enter image description here

及其相关与关系“参与者”的用户类别。

我知道,我要地图是工作,因为我在其他类中使用这个伟大工程的嵌套类,但这种实现是不同的,所以我不知道我怎么可以映射此。

我有这个在我的课:

.H类:

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 
#import "NSManagedObject+Convenience.h" 

@interface DUParticipant : NSManagedObject 

@property (nonatomic, retain) NSNumber * participantsCount; 
@property (nonatomic, retain) NSSet *participants; 

+ (RKEntityMapping *)mapping; 
+ (void)configMapping; 

@end 

.M类

#import "DUParticipant.h" 
#import "DUUser+Ext.h" 

@implementation DUParticipant 

@dynamic participantsCount; 
@dynamic participants; 

+ (RKEntityMapping *)mapping 
{ 
    RKEntityMapping* map = [super mapping]; 

    [map addAttributeMappingsFromDictionary:@{ 
     @"participants_count" : @"participantsCount" 
    }]; 


    return map; 
} 

+(void) configMapping{ 


    RKObjectManager* man= [RKObjectManager sharedManager]; 
    RKEntityMapping* map = [self mapping]; 
    [man addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:map pathPattern:@"/v1/users/participants" keyPath:nil 
                     statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]]; 

    RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; 
    [requestMapping addAttributeMappingsFromDictionary:@{ 
     @"participants_count" : @"participantsCount" 
    }]; 

    [map addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"participants" 
                     toKeyPath:@"participants" 
                     withMapping:[DUUser mapping]]]; 

    [man addRequestDescriptor:[RKRequestDescriptor requestDescriptorWithMapping:requestMapping 
                    objectClass:[DUParticipant class] rootKeyPath:@"DUParticipant"]]; 

} 

@end 

并且json的响应是:

{ 
    "participants_count": 1, 
    "participants": [ 
     { 
      "participant": { 
       "id": 3, 
       "gender": "M", 
       "name": "Oscar", 
       "lastname": "Lares", 
       "username": "CaLe", 
       "email": "[email protected]", 
       "bio": "UX Designer! Mac Geek, Computers, Gadgets and Movies lover!", 
       "created_at": "2012-07-28T18:34:27Z", 
       "updated_at": "2013-07-29T13:05:21Z", 
       "cover": null, 
       "avatar": { 
        "id": 108, 
        "original": "https://duuin.s3.amazonaws.com/uploads/image/file/108/photo.jpg", 
        "thumbnail": "https://duuin.s3.amazonaws.com/uploads/image/file/108/thumb_photo.jpg" 
       } 
      } 
     } 
    ] 

**** **编辑** **** 这是我在日志主机,它的JSON响应:

response.body = 
{ 
    "participants_count": 2, 
    "participants": [ 
     { 
      "participant": { 
       "id": 3, 
       "gender": "M", 
       "name": "blabla", 
       "lastname": "blabla", 
       "username": "blabla", 
       "email": "blabla", 
       "bio": "blablablablablabla", 
       "created_at": "2012-07-28T18:34:27Z", 
       "updated_at": "2013-07-29T13:05:21Z", 
       "cover": null, 
       "avatar": { 
        "id": 108, 
        "original": "blabla", 
        "thumbnail": "blabla" 
       } 
      } 
     }, 
     { 
      "participant": { 
       "id": 1, 
       "gender": "M", 
       "name": "blabla", 
       "lastname": "blabla", 
       "username": "blabla", 
       "email": "blabla", 
       "bio": "blabla", 
       "created_at": "2012-07-22T20:30:18Z", 
       "updated_at": "2013-07-31T03:52:26Z", 
       "cover": { 
        "id": 21, 
        "original": "blabla", 
        "thumbnail": "blabla" 
       }, 
       "avatar": { 
        "id": 19, 
        "original": "blabla", 
        "thumbnail": "blabla" 
       } 
      } 
     } 
    ] 
} 

并在日志中的对象:

2013-08-01 13:35:43.949 duuin[24550:c07] Participant: <NSManagedObject: 0x16d7ef00> (entity: DUParticipant; id: 0x16d74170 <x-coredata://1C844BC7-AF17-4D27-90F9-9F5B8ACDF848/DUParticipant/p86> ; data: { 
    participants = nil; 
    participantsCount = 2; 
}) 
+0

结果是什么,并有你开启跟踪记录看发生了什么? – Wain

+0

@Wain看到编辑的问题,兄弟 – FxckDead

回答

1

我认为问题出在你的嵌套类映射上。它可能在其他时间工作,但我认为背景是不同的。在所示代码中的参与者的字典里面participant键内。这需要反映在映射中的所有关键字中。


想必你的映射目前有:

@"gender" -> @"gender" 

但对于JSON告诉你它需要:

@"participant.gender" -> @"gender" 
+0

我不明白你的意思是什么“这需要在所有的映射中的键得以体现。” @Wain – FxckDead