2013-10-11 104 views
0

以前沒有需要AFNetworking的知識,但它可能會有所幫助。從父類的實例實例化子類

我正在使用AFNetworking,我想創建一個AFHTTPRequestOperation的子類,它有一些額外的屬性和方法。

我遇到的問題是我使用AFHTTPRequestOperationManager的工廠方法來生成我的AFHTTPRequestOperations,我顯然不想更改AFNetworking庫中的任何核心代碼。

所以我想要做的,是這樣的:

@implementation VP_AFHTTPRequestOperation : AFHTTPRequestOperation 

+ (id)instantiateUsingAFHTTPRequestOperation:(AFHTTPRequestOperation*)reqOp { 
    //I want to create an instance of VP_AFHTTPRequestOperation using the reqOp 
    self = reqOp; //I can't just do this, but I don't know what to do 
    return self; 
} 

- (void)mySubclassMethod { /* ... */ } 
@end 

我會很感激的任何建議

+0

爲什麼?你需要添加什麼?爲什麼? – Wain

+0

偉大的問題,我很可能需要做一些事情,而不是我所要求的。我需要添加2個屬性並覆蓋AFHTTPRequestOperation的一個方法(所以我想我需要繼承它) - 但我不想更改生成AFHTTPRequestOperation的核心AFHTTPRequestManager工廠方法。所以我希望能夠在我的子類中使用工廠方法生成AFHTTPRequestOperation的子類實例,但這可能不是正確的方法。 – Adam

+0

@Adam:那你到底需要添加到「AFHTTPRequestOperation」? –

回答

0

子AFHTTPRequestOperationManager並使其返回好東西在HTTPRequestOperationWithRequest

沒有修改任何需要的框架代碼AFAICS

@interface VP_AFHTTPRequestOperationManager : AFHTTPRequestOperationManager 
@end  

@implementation VP_AFHTTPRequestOperationManager 

+ (instancetype)manager { 
    return [[[self class] alloc] init]; 
} 

- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request 
               success:(void (^) (AFHTTPRequestOperation *operation, id responseObject))success 
               failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure 
{ 
    VP_AFHTTPRequestOperation *operation = [[VP_AFHTTPRequestOperation alloc] initWithRequest:request]; 
    operation.responseSerializer = self.responseSerializer; 
    operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage; 
    operation.credential = self.credential; 
    operation.securityPolicy = self.securityPolicy; 

    [operation setCompletionBlockWithSuccess:success failure:failure]; 

    return operation; 
} 

@end 
+0

我的不好,我不是故意在類方法中使用自我,你是對的 - 但仍然不是真的另外值得指出的是,我正在使用新的AFN,它不再使用AFHTTPClient。 – Adam

+0

,你不想只是覆蓋AFHTTPRequestOperationManager –

+0

我不想修改AFNetworking的任何核心代碼 - 這是一個外部依賴項,我實際上使用cocoapods進行加載,所以當有更新時,我不希望我的代碼中混入任何代碼。 – Adam

0

我想你可以通過繼承AFHTTPRequestOperationManager並使用AFHTTPRequestOperation的子類覆蓋HTTPRequestOperationWithRequest:success:failure來做你想做的事。它在文檔簡潔描述:

改變所有要求開工建設的行爲的 AFHTTPRequestOperationManager子類,覆蓋 HTTPRequestOperationWithRequest:成功:失敗。

+0

我說;)由於某種原因,我不能推斷他不想這樣:P –

+0

@ Daij-Djan - 我不想要子類AFHTTPRequestOperationManager也是如此。但是,它確實看起來像是唯一的方式去做,也是爲了AFHTTPRequestOperationManager的子類。 – Adam

+0

給你寫了那段代碼。玩的開心 –