1 #import "ViewController.h" 2 #import "Header.h" 3 4 @interface ViewController ()<NSURLSessionDataDelegate> 5 6 /** 7 * 用於保存相關的數據 8 */ 9 @property (nonatomic, strong) NSMutableData *resultData; 10 11 @end 12 13 @implementation ViewController 14 15 - (void)viewDidLoad { 16 [super viewDidLoad]; 17 // Do any additional setup after loading the view, typically from a nib. 18 } 19 20 // 對數據進行加載:使用NSURLSessionDataTask和NSURLSessionTask二者沒有本質區別 21 // 要處理下載任務的使用使用此任務NSURLSessionDownloadTask 22 // 要處理上傳任務使用:NSURLSessionUploadTask 23 24 #pragma mark - post請求(異步) 25 - (IBAction)postRequest:(UIButton *)sender { 26 27 // 1.建立url 28 NSURL *url = [NSURL URLWithString:GET_URL]; 29 30 // 2.建立請求 31 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 32 33 34 // 2.5.設置body 35 // 建立一個鏈接字符串(這個內容在之後的開發中接口文檔都有標註) 36 NSString *dataStr = POST_BODY; 37 38 // 對鏈接字符串進行編碼【這一步千萬不能忘記】 39 NSData *postData = [dataStr dataUsingEncoding:NSUTF8StringEncoding]; 40 41 // 設置請求格式爲post請求【在這裏POST必須大寫】 42 [request setHTTPMethod:@"POST"]; 43 44 // 設置請求體(body) 45 [request setHTTPBody:postData]; 46 47 // 3.建立session對象並設置代理 48 // 參數一:模式的設置 49 /* 50 defaultSessionConfiguration 默認會話模式 51 ephemeralSessionConfiguration 瞬時會話模式 52 backgroundSessionConfigurationWithIdentifier 後臺會話模式 53 */ 54 // 參數二:代理 55 // 參數三:線程隊列 56 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; 57 58 59 // 4.建立task對象 60 NSURLSessionDataTask *task = [session dataTaskWithURL:url]; 61 62 63 // 5.啓動任務 64 [task resume]; 65 66 // 對數據進行加載:使用NSURLSessionDataTask和NSURLSessionTask二者沒有本質區別 67 // 要處理下載任務的使用使用此任務NSURLSessionDownloadTask 68 // 要處理上傳任務使用:NSURLSessionUploadTask 69 70 } 71 72 #pragma mark - 實現協議方法 73 // 服務器開始響應 74 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler { 75 76 // 容許服務器響應【在這個地方只有容許服務器響應了纔會接收到數據】 77 completionHandler(NSURLSessionResponseAllow); 78 79 // 初始化data,稍後進行片斷的拼接存儲 80 self.resultData = [NSMutableData data]; 81 } 82 83 // 接收數據拼接 84 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { 85 86 // 反覆執行,而後拼接相關的片斷 87 [self.resultData appendData:data]; 88 } 89 90 // 數據接收完成,網絡請求結束 91 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { 92 93 // 解析 94 if (error == nil) { 95 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil]; 96 NSLog(@"%@", dic); 97 } 98 } 99 100 @end