一般是 控制器(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;
多了一行代码也无伤大雅。只是有点代码洁癖。能不能有更优雅的方式去通知控制器,提示网络请求失败?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我一般是这样的
网络服务层我设计了一个协议,这个协议主要暴露了3个方法,refresh、lodeMore、post,他们的功能分别是刷新数据,加载数据,请求操作。
每个方法有一个回调函数,refresh、lodeMore的回调会在请求完毕被调用,因为请求的是为了显示在界面上的数据,成功或失败我在服务层已经做好处理了,完成后不管请求是否成功,在viewController那边都要做一些处理比如下拉刷新条回弹,刷新tableview之类的。
而post我一般用来做一些没有数据回来的操作,(我一般将请求分为两类,一种是数据,一种是操作,数据比如请求商品数据之类的,这些是需要刷新和加载的,而操作就比如登录注册之类的),比如登录操作,这时我的回调函数会在请求成功的时候调用,失败了在服务层处理,成功了在controller做一些操作,比如登录成功保存cookie等等。
用回调函数就可以了,不需要那么复杂
难道你不知道还有BLOCK