ios 网络请求失败,通知控制器提示。怎样优雅的写代码?
天蓬老师
天蓬老师 2017-04-17 17:08:39
[iOS讨论组]

一般是 控制器(A)--网络服务层(B)--模型层(C)。(ABC是我乱指定的)

控制器发起网络请求,顺序是 A->B->C。这样A调用B,B调用C很方便,但是方向反过来

B发现网络请求失败,想通知A。执行如下代码:

 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:@"网络有点问题,请稍后重试" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action){
    }];
    [alertController addAction:okAction];
    [self presentViewController:alertController animated:YES completion:nil];

一开始我打算使用NSNotificationCenter。但是总不能每个控制器都添加通知吧。

现在我只能使用代理了,但是每次定义B层都是这样定义:

self.loginService = [[LoginService alloc] init];
self.loginService.delegate = self;

多了一行代码也无伤大雅。只是有点代码洁癖。能不能有更优雅的方式去通知控制器,提示网络请求失败?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
ringa_lee

我一般是这样的
网络服务层我设计了一个协议,这个协议主要暴露了3个方法,refresh、lodeMore、post,他们的功能分别是刷新数据,加载数据,请求操作。
每个方法有一个回调函数,refresh、lodeMore的回调会在请求完毕被调用,因为请求的是为了显示在界面上的数据,成功或失败我在服务层已经做好处理了,完成后不管请求是否成功,在viewController那边都要做一些处理比如下拉刷新条回弹,刷新tableview之类的。
而post我一般用来做一些没有数据回来的操作,(我一般将请求分为两类,一种是数据,一种是操作,数据比如请求商品数据之类的,这些是需要刷新和加载的,而操作就比如登录注册之类的),比如登录操作,这时我的回调函数会在请求成功的时候调用,失败了在服务层处理,成功了在controller做一些操作,比如登录成功保存cookie等等。

黄舟

用回调函数就可以了,不需要那么复杂

高洛峰

难道你不知道还有BLOCK

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号