gpt4 book ai didi

ios - 为所有Restkit请求添加Url参数

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

它们是一种向所有 restkit 请求添加一些 url 参数(如 http://api.example.com/v3/object?data=123&info=test )而不手动将它们添加到所有请求的方法吗

getObjectsAtPath:parameters:success:failure:
getObjectsAtPathForRouteNamed:object:parameters:success:failure:
...

每个请求都应该添加info参数。

实际上,我有一种方法可以使用 Method Swizzling。它们是直接使用 RestKit 实现的方法吗?

最佳答案

您有几种方法可以做到这一点:

您可以将 RKObjectManager 的方法子类化为如下所示:

-(void)addedParamToGetObjectsAtPath:(NSString*)path parameters:(NSDictionary*)parameters success:(success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)successBlock failure::^(RKObjectRequestOperation *operation, NSError *error){

NSMutableDictionary* newParams = [NSMutableDictionary new];
if(parameters){
[newParams addEntriesFromDictionary:parameters];
}
newParams[@"info"]=test;
getObjectsAtPath:(NSString*)path parameters:(NSDictionary*)parameters success:(success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){
// Deal with the success here
successBlock(operation, mappingResult);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
//Deal with the error here
errorBlock(operation, error);
}];

或者告诉 Restkit 使用不同的 RequestOperationClass

//When configuring RestKit
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:BASE_URL]];
//Some more configuration
//....
[objectManager registerRequestOperationClass:[YourObjectRequestOperation class]];

并定义RKObjectRequestOperation的子类,YourObjectRequestOperation

#import "FBObjectRequestOperation.h"

@interface RKHTTPRequestOperation ()
@property (nonatomic, strong, readwrite) NSMutableURLRequest* request;
@end

@implementation FBObjectRequestOperation


- (id)initWithHTTPRequestOperation:(RKHTTPRequestOperation *)requestOperation responseDescriptors:(NSArray *)responseDescriptors
{
NSParameterAssert(requestOperation);
NSParameterAssert(responseDescriptors);

//your method to change the requestOperation

RKHTTPRequestOperation* myRequestOperation = [YourObjectRequestOperation addParametersToRequest:requestOperation];

self = [super initWithHTTPRequestOperation:myRequestOperation responseDescriptors:responseDescriptors];
if (self) {
//Change headers or any other thing that you need
}

return self;

要实际更改 requestOperation,您需要从请求中获取 url,并在其中添加新参数。这将在这部分发生 RKHTTPRequestOperation* myRequestOperation = [YourObjectRequestOperation addParametersToRequest:requestOperation]; 我不辜负你来完成代码。

这应该适用于您使用对象管理器执行的任何请求。当您需要为每个请求动态计算 header 时,此技术也非常有用。

关于ios - 为所有Restkit请求添加Url参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231439/

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