iOS APP 开发 OC 第十五天,网路请求(错误处理)

tags: 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);
    }];

当我们发送请求时,会拿到三个东西。

  1. reponse
  2. data
  3. connectionError
    那我们拿数据时,不能直接拿,因为在我们拿资料前,网路很有可能会发生错误。

拿数据之前,应先判断错误

可以利用if判变式,如下

if (!connectionError) {
    <#statements#>
}

当没有错误时,执行放在里面的代码
因此我们按照当没错误时,显示资料。错误时,显示错误讯息

        if (!connectionError) {
                        NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@",str);
        }else{
            NSLog(@"error: %@",connectionError);
        }

错误处理处理完了吗?还没!! 还有reponse要处理

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

利用 response 里的 status 判断状态

connectionError 是什麽呢?

是我们发送数据之前的事情,判断是否正常接受到服务器返回的数据。

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);
        }

<<:  iOS APP 开发 OC 第十五天,网路请求(请求方式对比,缓存策略,请求时长)

>>:  panel data regression in r

我们的基因体时代-AI, Data和生物资讯 Day02- 机器学习在生物资讯中之应用

上一篇我们的基因体时代-AI, Data和生物资讯 Day01- 超越摩尔定律的资料增长介绍了生医领...

如何入手数位行销创造转换率

数位行销使您能够每天跟踪活动,并减少您在某个渠道上的支出。传统的广告形式则不一定了,即使您的收益很差...

07 - Zim - Zsh 配置框架与它的插件

Zsh 可以让使用者利用配置客制各种不同的功能,像是命令的自动补全、提示、高亮与缩写等。但是要自己设...

14.MYSQL搜寻字串

在资料库中除了有数字和字母之外,当然也会有字串,如果想要搜寻字串,就要使用'单引号' 而字串要使用运...

Day19. Blue Prism请gmail帮忙 -BP 自动送出Email附件

由於老师的成绩分级档案需要能自动送交学校教务处, 因此,我们就来设计一个可以自动将档案附在Email...