2014-01-11 92 views
0

我有一個應用程序,我在其中調用webservice以檢索具有給定ID的JSON對象。 無論我在什麼類中,獲取對象的方法都是系統相同的,但成功塊將會不同(id est,處理部分) - 例如使用AFNetworking。目標C中的類繼承和自定義^塊執行C

我正在尋找正確的方式來實現只有一次的getter部分,但能夠自定義處理。

是下面這段代碼的好辦法:

-(void)getObjectWithId:(NSString*)id_{ 

    NSString *ns1 = [NSString stringWithFormat:@"%@%@%@",HOSTNAME,API_DETAIL,id_]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:ns1]]; 

    AFJSONRequestOperation *operation =[AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 


     //Here I want to do different processing task accordingly inheritance level // current class 

     DLog(@"Response : %@ \n Request : %@",response,request); 

     [self processObject:JSON]; 


    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 

     //Do failure stuff 

    }]; 

    [operation start]; 

} 

然後:

-(void)processObject:(id)JSON{ 


    //Customize according to current class 

} 

因此,所有的子類將從getObjectWithId繼承和擁有自己的執行processObject

我還應該考慮什麼?是一種正確的方式?

回答

2

您的選擇將起作用,但它限制將代碼放在超類中。如果限制適合您,那麼繼續。

另一種方法是創建一個輔助方法或管理器類,它承載了getObjectWithId:方法,但提供2個參數,其中第二個參數是以JSON作爲參數的塊。通過這種方式,該方法包含所有可重用代碼,並且該塊允許與原始AFNetworking API相同的任意用法。

注意,「有道」是什麼你的工作情況,也是理解和維護......

+0

感謝,在較高的水平我的代碼審查後,我想我會在我的單身管理器,它是適當的(我認爲)包裝使用類一個getter方法,並將一個塊作爲參數傳遞給JSON。聽起來不錯 ! –

1

無需使用子類。代表會幫助你。

您可以創建一個實用程序類來檢索JSON對象併爲其聲明一個協議。

@protocol WebServiceDelegate <NSObject> 
- (void)didRetrivalJsonObject:(id)json ; 
@end 

您還需要修改方法

- (void)getObjectWithId:(NSString*)id_ delegate:(id<WebServiceDelegate>)delegate 
{ 
    NSString *ns1 = [NSString stringWithFormat:@"%@%@%@",HOSTNAME,API_DETAIL,id_]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:ns1]]; 
    AFJSONRequestOperation *operation =[AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
     //Here I want to do different processing task accordingly inheritance level // current class 
     DLog(@"Response : %@ \n Request : %@",response,request); 
     [delegate processObject:JSON]; 
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
     //Do failure stuff 
    }]; 
    [operation start]; 
} 
+0

我會考慮下面的方法,但謝謝,這似乎也很酷 –