2015-01-30 6 views
0

들이 모두

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

에 수동으로 정보 매개 변수를 추가해야합니다 각 요청을에 추가 모든 restkit 요청 witouth 일부 URL 매개 변수를 추가하는 방법 (같은 http://api.example.com/v3/object?data=123&info=test을)가 모든 Restkit 요청에 URL 매개 변수를 추가합니다.

나는 방법 Swizzling을 사용하여 실제로 그것을 할 수있는 방법이 있습니다. RestKit으로 직접 할 수있는 방법입니까?

답변

1

당신은이 작업을 수행하는 몇 가지 방법이 있습니다

할 수 있습니다 중 이런 일에 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); 
}]; 

또는 다른 RequestOperationClass

//When configuring RestKit 
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:BASE_URL]]; 
//Some more configuration 
//.... 
[objectManager registerRequestOperationClass:[YourObjectRequestOperation class]]; 
를 사용하는 Restkit에게

그리고 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; 

}

실제로 당신이 요청에서 URL을 얻고 거기에 새로운 매개 변수를 추가해야하는 requestOperation을 변경합니다. 이 부분은 RKHTTPRequestOperation* myRequestOperation = [YourObjectRequestOperation addParametersToRequest:requestOperation];에서 발생하며 코드 완성을 위해 귀하와 함께합니다.

이것은 개체 관리자로 수행중인 모든 요청에 ​​적용됩니다. 이 기법은 각 요청에 대해 헤더를 동적으로 계산해야하는 경우에도 매우 유용합니다.