我現在用到了ASIHttpRequest來讀取數據,這時候我發現里面的頭在很多時候都是一樣的。如用戶的令牌,設備類型,ios版本,軟件版本等
[self.request addRequestHeader:@"Authorization" value:[SaveData getStringFromSetting:@"Ticket"]]; [self.request addRequestHeader:@"DeviceType" value:[StaticData getDeviceType]]; [self.request addRequestHeader:@"SystemVersion" value:[StaticData getSystemVersion]]; [self.request addRequestHeader:@"LocalVersion" value:[StaticData getLocalVersion]];
如果在每一個訪問網絡的地方都加這一個,這樣重復性就很大,所以需要抽出來。
我的想法是在父類中放一個方法,把我們需要訪問的網址給這個方法就可以了,所以我在父類中寫了一個讀取的方法。
-(void)readNetworkDataWithUrl:(NSString *)url number :(int)number { [HUD show:YES];//顯示加載中狀態 url = [NSString stringWithFormat:@"%@%@",[StaticData getUrlDomain],url]; //訪問的地址 NSURL *_url = [NSURL URLWithString:url]; //訪問 self.request = [ASIHTTPRequest requestWithURL:_url]; //超時時間多少秒 [self.request setTimeOutSeconds:120]; //訪問失敗重新訪問次數 [self.request setNumberOfTimesToRetryOnTimeout:2]; //是否使用持久化連接 [self.request setShouldAttemptPersistentConnection:NO]; [self.request addRequestHeader:@"Authorization" value:[SaveData getStringFromSetting:@"Ticket"]]; [self.request addRequestHeader:@"DeviceType" value:[StaticData getDeviceType]]; [self.request addRequestHeader:@"SystemVersion" value:[StaticData getSystemVersion]]; [self.request addRequestHeader:@"LocalVersion" value:[StaticData getLocalVersion]]; //獲取數據成功執行的方法 [self.request setCompletionBlock:^(void) { [HUD hide:YES];//隱藏加載中狀態 NSString *jsonString = [self.request responseString]; [self.delegate1 viewBaseReadDataSuccessWith:jsonString number:number]; }]; //獲取數據失敗執行的方法 [self.request setFailedBlock:^(void){ [HUD hide:YES];//隱藏加載中狀態 if([self.delegate1 respondsToSelector:@selector(viewBaseReadDataFailed:)]){ [self.delegate1 viewBaseReadDataFailed:number]; } }]; [self.request setDelegate:self]; [self.request startAsynchronous]; }
本來我是想把讀到的值直接作返回值返出去,可是好象是異步處理的,返不出去。我就只能想辦法通過Delegate接口來把值傳出去了。
就是其中的
[self.delegate1 viewBaseReadDataSuccessWith:jsonString number:number];
[self.delegate1 viewBaseReadDataFailed:number];
現在我就通過繼承父類的接口來實現數據的處理。
實現方法如下:
#pragma mark - #pragma mark ViewBaseForConnectNetwork Delegate -(void)viewBaseReadDataSuccessWith:(NSString *)jsonString number:(int)nunmber { NSMutableDictionary *tempDictionary = [jsonString JSONValue]; bool result = [[tempDictionary objectForKey:@"Result"] intValue]; if (result) { NSLog(@"in true"); NSString *ticket = [[tempDictionary objectForKey:@"Content"] objectForKey:@"Ticket"]; NSLog(@"%@",ticket); }else{ NSLog(@"in false"); NSString *message = [tempDictionary objectForKey:@"Message"]; NSLog(@"%@",message); } LoginSuccessViewController *newView = [[LoginSuccessViewController alloc]init]; newView.title = @"登錄成功"; newView.hidesBottomBarWhenPushed = YES; [self.navigationController pushViewController:newView animated:YES]; } -(void)viewBaseReadDataFailed:(int)number{ NSLog(@"出錯執行的方法"); }
這樣就實現了我把公用的頭放到父類中的功能。
其中的 (int)nunmber 是處理一個頁面中會出現多次的請求,來區分是處理哪一個數據的。