- (NSURLSessionDataTask *)defaultRequestwithURL: (NSString *)URL withParameters: (NSDictionary *)parameters withMethod: (NSString *)method withBlock:(void (^)(NSDictionary *dict, NSError *error))block { //預設列印傳入的實參 #ifdef DEBUG NSLog(@"common method = %@", method);//get 或 post NSLog(@"common URL = %@", URL);//所請求的網址 NSLog(@"common parameters = %@", parameters);//傳入的參數 #endif //根據method字串判斷調用AFNetworking裡的get方法還是post方法 if ( [method isEqualToString:@"GET"] ) {//所用到的是AFNetworking3.1.0裡的方法,其新加了progress進度block return [[AFAppDotNetAPIClient sharedClient] GET:URL parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable JSON) { #ifdef DEBUG NSLog(@"common get json = %@", JSON);//列印擷取到的json #endif NSDictionary *dict = JSON;//直接返回字典,方便使用 if (block) { block(dict, nil); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //如果請求出錯返回空字典和NSError指標 if (block) { block([NSDictionary dictionary], error);//這一點算是比較坑的地方了,因為比如我要根據一個欄位來判斷是否請求成功,我對一個空字典@{}, //根據一個key取value:[@{} objectForKey:@"errorCode"], //然後判斷字串的intValue是否等於0:[[@{} objectForKey:@"errorCode"] intValue] == 0是返回1的。 //我想的解決辦法就是從伺服器端來改,返回的欄位key用isSuccess,value是字串True或False即可解決, //但是這樣又只能知道成功或失敗並不能根據errorCode碼進行其他動作,因為errorCode可以為0、1、2、3等等。 } //從指標級判斷error是否為空白,如果不為空白就列印error if (error) { NSLog(@"%@",error); } }]; } //post相關代碼 return [[AFAppDotNetAPIClient sharedClient]POST:URL parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable JSON) { #ifdef DEBUG NSLog(@"common post json = %@", JSON);//列印擷取到的json #endif NSDictionary *dict = JSON;//直接返回字典,方便使用 if (block) { block(dict, nil); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //如果請求出錯返回空字典和NSError指標 if (block) { block([NSDictionary dictionary], error); } //從指標級判斷error是否為空白,如果不為空白就列印error if (error) { NSLog(@"%@",error); } }]; //傳回值暫時用不到,不需要建立變數接收;傳進的self指標也沒有用到所以這個方法可移植性很強 } -(void)request { //測試網路要求方法 //1.所用到的網址是本人以前抓到的,API是用php寫的,伺服器很穩定,我常用來測試,也僅供測試 //2.get參數 start和end傳不帶正負號的整數 NSDictionary *parameters = @{ @"type":@"list", @"city":@"2", @"lid":@"31", @"sortby":@"1", @"start":@"0", @"end":@"3" }; [self defaultRequestwithURL:@"/api.php" withParameters:parameters withMethod:@"GET" withBlock:^(NSDictionary *dict, NSError *error) { }]; } |