子类化AFHTTPRequestOperation

时间:2015-05-19 11:54:49

标签: ios objective-c afnetworking hierarchy afnetworking-2

我正在使用AFNetworking 2.0库作为其基础的网络层。我打算为每个请求创建单独的类,并使用AFHTTPRequestOperation作为基类。 所以我有类似的东西:

ABCLoginOperation : AFHTTPRequestOperation

每个自定义包装器类都有一些其他属性,可以方便地处理请求/响应参数。 所以在我的例子中,工作流程如下:

  1. 创建ABCLoginOperation类实例;
  2. 通过设置其他属性来配置ABCLoginOperation;
  3. ABCLoginOperation添加到任何NSOperationQueue
  4. 运行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周围创建一些自定义包装层的正确方法是什么?
    提前致谢。

0 个答案:

没有答案