在Restkit 0.2中添加给定类的两个请求描述符

我需要从User类创build两种不同types的POST。

//JSON Type A { "password":"12345", "email":"test@gmail.com" } //JSON Type B { "user":{ "Password":"12345", "Email":"sample@gmail.com" } } 

我试图做两个请求描述符,并将其添加到我的对象pipe理器,但是我得到的错误

“无法为与现有请求描述符相同的对象类添加请求描述符。”

我的代码

 @interface User : NSObject @property (nonatomic, retain) NSString * userID; @property (nonatomic, retain) NSString * email; @property (nonatomic, retain) NSString * password; @property (nonatomic, retain) NSString * firstName; @property (nonatomic, retain) NSString * lastName; @end - (void)setupUserMapping:(RKObjectManager *)objectManager { // Setup user response mappings RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[User class]]; [userMapping addAttributeMappingsFromDictionary:@{ @"ID" :@"userID", @"Email" : @"email", @"Password" : @"password", @"FirstName" : @"firstName", @"LastName" : @"lastName", }]; RKResponseDescriptor *responseDescriptorAuthenticate = [RKResponseDescriptor responseDescriptorWithMapping:userMapping pathPattern:@"/Authenticate" keyPath:nil statusCodes:[NSIndexSet indexSetWithIndex:200]]; RKResponseDescriptor *responseDescriptorRegister = [RKResponseDescriptor responseDescriptorWithMapping:userMapping pathPattern:@"/Register" keyPath:nil statusCodes:[NSIndexSet indexSetWithIndex:200]]; [objectManager addResponseDescriptor:responseDescriptorRegister]; [objectManager addResponseDescriptor:responseDescriptorAuthenticate]; // Setup user request mappings RKObjectMapping* userRequestMappingForRegister = [RKObjectMapping requestMapping]; [userRequestMappingForRegister addAttributeMappingsFromDictionary:@{ @"email" : @"Email", @"password" : @"Password", @"firstName" : @"FirstName", @"lastName" : @"LastName", }]; RKRequestDescriptor *requestDescriptorForRegister = [RKRequestDescriptor requestDescriptorWithMapping:userRequestMappingForRegister objectClass:[User class] rootKeyPath:@"user"]; RKObjectMapping* userRequestMappingForAuthenticate = [RKObjectMapping requestMapping]; [userRequestMappingForAuthenticate addAttributeMappingsFromDictionary:@{ @"userID" :@"ID", @"email" : @"email", @"password": @"password" }]; RKRequestDescriptor *requestDescriptorForAuthenticate = [RKRequestDescriptor requestDescriptorWithMapping:userRequestMappingForAuthenticate objectClass:[User class] rootKeyPath:nil]; [objectManager addRequestDescriptor:requestDescriptorForRegister]; [objectManager addRequestDescriptor:requestDescriptorForAuthenticate]; } 

有谁知道我可以如何解决这个问题,而无需为这些请求创build一个单独的类?

任何帮助表示赞赏。

谢谢。

您可以使用dynamic映射来切换序列化行为。 如果这是一个常见的问题,我们可以想象将请求描述符的path匹配。 我只是没有很多的要求这样的function。

下面是一个如何在unit testing中使用带有请求的dynamic映射的例子: https : //github.com/RestKit/RestKit/blob/master/Tests/Logic/ObjectMapping/RKObjectParameterizationTest.m#L495-L534