我正在使用AFNetworking 2.0
库作为其基础的网络层。我打算为每个请求创建单独的类,并使用AFHTTPRequestOperation
作为基类。
所以我有类似的东西:
ABCLoginOperation : AFHTTPRequestOperation
每个自定义包装器类都有一些其他属性,可以方便地处理请求/响应参数。 所以在我的例子中,工作流程如下:
ABCLoginOperation
类实例; ABCLoginOperation
; ABCLoginOperation
添加到任何NSOperationQueue
ABCLoginOperation *loginOperation = [[ABCLoginOperation alloc] init];
ABCLoginRequestModel *requestModel = operation.requestModel;
requestModel.username = @"username";
requestModel.password = @"password";
[ABCOperationManager enqueueOperation:operation];
醇>
我正在努力实现的目标是这样的:
AFHTTPRequestOperation
问题是ABCOperationManager
对我用于描述请求参数的其他属性一无所知,我必须在步骤2和步骤3之间解决此问题。
所以我实现了一个自定义请求管理器AFHTTPRequest's
,它应该根据ABCLoginOperation's
属性设置NSURLRequestObject
属性。我认为可以创建ABCLoginOperation
,根据NSURLRequestObject
对象的属性设置参数,并将此request
设置为AFHTTPRequestOperation
属性{{1} } / AFURLConnectionOperation
在其实现中使用。因此ABCOperationManager's
enqueueOperation:
方法的实现是这样的:
- (void)enqueueOperation:(ABCOperation *)operation {
[self configureOperation:operation];
[self.operationQueue addOperation:operation]; //or use AFHTTPOperationManager's operation queue
}
- (void)configureOperation:(ABCOperation *)operation {
NSMutableURLRequest *mutableURLRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[operation getRequestPath]] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:operation.timeoutInterval];
//some further configuration of mutableUrlRequest
operation.request = mutableURLRequest //the problem
}
但问题是request
的{{1}}属性是只读的,只能在构造函数中设置。所以似乎没有办法预先配置我的AFHTTPRequestOperation
,因为创建它的唯一方法是使用 - ABCOperation
构造函数。从我的角度来看,这使initWithRequest:
子类化变得毫无用处。你可以试着解释一下我做错了什么,以及在AFHTTPRequestOperation
周围创建一些自定义包装层的正确方法是什么?
提前致谢。