微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我需要从User类中提供两种不同类型的POST.
//JSON Type A
{
    "password":"12345","email":"test@gmail.com"
}

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

我试图制作两个请求描述符并将其添加到我的对象管理器,但是我收到错误

“Cannot add a request descriptor for the same object class as an
existing request descriptor.”

我的代码

@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];
}

有没有人知道如何解决这个问题,而不需要为这些请求创建一个单独的类?

任何帮助是赞赏.

谢谢.

解决方法

您可以使用动态映射来切换序列化行为.如果这是一个很常见的问题,我们可以想象地将路径匹配添加到请求描述符中.我只是没有这么多的要求.

一个例子说明如何在单元测试中使用带有请求的动态映射:https://github.com/RestKit/RestKit/blob/master/Tests/Logic/ObjectMapping/RKObjectParameterizationTest.m#L495-L534

原文地址:https://www.jb51.cc/iOS/329492.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐