gpt4 book ai didi

ios - 如何在 RestKit 中映射动态响应?

转载 作者:行者123 更新时间:2023-11-29 03:21:09 25 4
gpt4 key购买 nike

我的服务对一个对象有两种不同的响应:

这是没有错误时的第一个响应:

{"responseError":{"ApplicationErrorCode":101,"DeveloperMessage":"需要代码","UserMessage":null},"shortToken":null}

这是出现错误时的第二个响应:

{"responseError":null,"shortToken":sometoken}

我创建了一个名为 RKShortToken 的对象,它看起来像这样:

@interface RKShortToken : NSObject
@property (copy, nonatomic) RKResponseError *responseError;
@property (copy, nonatomic) NSString *shortToken;
@end

我还有这个名为 RKResponseError 的对象:

@interface RKResponseError : NSObject
@property (copy, nonatomic) NSString *applicationErrorCode;
@property (copy, nonatomic) NSString *developerMessage;
@property (copy, nonatomic) NSString *userMessage;
@end

首先初始化RestKit客户端:

NSURL *baseURL = [NSURL URLWithString:kServiceDevBaseURL];
self.manager = [RKObjectManager managerWithBaseURL:baseURL];
[self.manager setRequestSerializationMIMEType:RKMIMETypeJSON];
[self.manager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];
[self.manager addResponseDescriptorsFromArray:[RKObjectManager sharedManager].responseDescriptors];
[self.manager addRequestDescriptorsFromArray:[RKObjectManager sharedManager].requestDescriptors];
[self.manager.HTTPClient.operationQueue setMaxConcurrentOperationCount:5];
[RKObjectManager setSharedManager:self.manager];

比添加一条路线:

RKRoute *shortTokenRoute = [RKRoute routeWithClass:[RKShortToken class] pathPattern:@"users/login/quick/shortToken" method:RKRequestMethodGET];
shortTokenRoute.shouldEscapePath = YES;
[self.manager.router.routeSet addRoute:shortTokenRoute];

然后添加一个描述符:

RKObjectMapping *shortTokenMapping = [RKObjectMapping mappingForClass:[RKShortToken class]];
[shortTokenMapping addAttributeMappingsFromDictionary:@{ @"responseError" : @"responseError", @"shortToken" : @"shortToken" }];
RKResponseDescriptor *shortTokenDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:shortTokenMapping
method:RKRequestMethodAny
pathPattern:@"users/login/quick/shortToken"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[[RKObjectManager sharedManager] addResponseDescriptor:shortTokenDescriptor];

我如何使用 RestKit 处理这种响应?我认为我的路线或描述符有问题..

提前致谢!

最佳答案

RKRoute 对象用于请求,因此它们不参与处理响应数据。

您的响应描述符有一个单独的映射:@"responseError": @"responseError" - 如果您将响应直接映射到字典中,将使用它:@property(复制,非原子)NSDictionary *responseError;

因为您想将响应映射到 RKResponseError 实例中,您需要为该类创建另一个映射并使用 addRelationshipMappingWithSourceKeyPath:@"responseError"mapping:responseErrorMapping 进行连接新映射到“外部”映射。

最后,请注意 RK 是 RestKit 的命名前缀,您应该为您自己创建的类使用不同的前缀。

关于ios - 如何在 RestKit 中映射动态响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21074720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com