OC 30 day
下面這段程式碼是上一篇文章做出來的。
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
}];
當我們發送請求時,會拿到三個東西。
可以利用if判變式,如下
if (!connectionError) {
<#statements#>
}
當沒有錯誤時,執行放在裡面的代碼
因此我們按照當沒錯誤時,顯示資料。錯誤時,顯示錯誤訊息
if (!connectionError) {
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
}else{
NSLog(@"error: %@",connectionError);
}
錯誤處理處理完了嗎?還沒!! 還有reponse要處理
我們來執行代碼,然後把respone po 出來
可以看到以下資訊:
<NSHTTPURLResponse: 0x60000119dac0> { URL: https://run.mocky.io/v3/39057ccc-3332-4a2f-a88f-7bd259f078b0 } { Status Code: 200, Headers {
"Content-Length" = (
57
);
"Content-Type" = (
"application/json; charset=UTF-8"
);
Date = (
"Fri, 08 Jan 2021 06:32:46 GMT"
);
"Sozu-Id" = (
"a65d5768-0b74-40bf-b899-cb4dd63982bd"
);
} }
你不難發現這些數據的是 header,那我們也得到了以下的結論:
reponse 就是 header
data 就是 body
是我們發送數據之前的事情,判斷是否正常接受到伺服器返回的數據。
reponse是什麼類型呢?
NSURLRespons
if (!connectionError) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
if (httpResponse.statusCode == 200 || httpResponse.statusCode == 304){
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
}else{
NSLog(@"服務器內部測試");
}
}else{
NSLog(@"error: %@",connectionError);
}