开源中国iOS客户端学习——(六)网络连接检测
来源:互联网 发布:淘宝店铺第三层级 编辑:程序博客网 时间:2024/05/16 18:31
---------------------------------------------------------------------------------------------------------------------------
2015.8.19 更新
考虑到还会有很多童鞋会看到该Blog,在此做一个说明,开源中国iOS开源客户端源码已做重构,请下载最新的源码学习(注:本Blog不一定适用与新的代码学习)。
新repo地址:http://git.oschina.net/oschina/iphone-app。
另外,这篇Blog收集了一些其他社区的客户端源码,源码也正在不断更新中,有的也上架appstore。
访问地址:http://duxinfeng.com/2015/07/14/iOS%E5%BC%80%E6%BA%90App%E6%95%B4%E7%90%86/
---------------------------------------------------------------------------------------------------------------------------
开源中国iOS客户端基于网络同步数据,从而达到与网页看到同样数据效果,所以在启动程序的时候需要检查网络;这也是每一个联网应用启动的第一步,如果联网应用没有检查网络,苹果公司将不予以审核通过;
开源中国iOS客户端大牛们在写网络检测时很迷惑人,开始以为他们用的是ASI类库做的网络检测,今天才看明白,他们并不是用的ASI类库检测,而是用到AFNetworking这个类库里一个实例方法做网络连接检测;
先看Appdelegate文件:
在application:didFinishLaunchingWithOptions:方法里
//检查网络是否存在 如果不存在 则弹出提示 [Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];
在applicationDidBecomeActive:方法里
- (void)applicationDidBecomeActive:(UIApplication *)application{ [Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork]; if ([Config Instance].isNetworkRunning == NO) { UIAlertView *myalert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"未连接网络,将使用离线模式" delegate:self cancelButtonTitle:@"确认" otherButtonTitles:nil,nil];[myalert show]; }}
都用到了[Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];再看看Config和CheckNetwork这两个类定义
Config类的Instance方法,
static Config * instance = nil;+(Config *) Instance{ @synchronized(self) { if(nil == instance) { [self new]; } } return instance;}从字面意思也能推测出是给Cinfig类实例化用的,isNetworkRunning是BOOL型变量
CheckNetwork在ASIHttp文件里,和ASI类库放到一块的,(里面汉字出现乱码)
+(BOOL)isExistenceNetwork{//BOOL isExistenceNetwork;//Reachability *r = [Reachability reachabilityWithHostName:@"www.oschina.net"];// switch ([r currentReachabilityStatus]) {// case NotReachable://isExistenceNetwork=FALSE;// // NSLog(@"娌℃湁缃戠粶");// break;// case ReachableViaWWAN://isExistenceNetwork=TRUE;// // NSLog(@"姝e湪浣跨敤3G缃戠粶");// break;// case ReachableViaWiFi://isExistenceNetwork=TRUE;// // NSLog(@"姝e湪浣跨敤wifi缃戠粶"); // break;// }//return isExistenceNetwork; return YES;}本来是使用苹果官方提供的Reachability来检测网络连接状况,但是大牛们又给注释掉了,return YES;
也就是[Config Instance].isNetworkRunning=YES;
但是当我把iMac网线拔掉运行的时候却能检测出网络无连接,通过查找 “错误 网络无连接”
发现他们都在AFNetworking类库
- (void)postPath:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure 方法里面,
这个方法使用AFHTTPRequestOperation和“PATCH”请求HTTP客户端操作队列,使用到了block块(iOS 4.0+特性),URL请求成功执行success块里操作,这里面block块没有返回值,接受两个参数,创建请求操作和响应数据请求,URL请求失败执行failure里面的方法,这个block块里仍没有返回值,接受两个参数创建请求操作和NSError对象,描述网络或解析错误状况;
所以才有了上面截图中网络的连接检测,拿源码中一处来举例
正在学习过程中,错误之处请指正,欢迎交流,共同学习;
欢迎转载分享,请注明出处http://blog.csdn.net/duxinfeng2010
- 开源中国iOS客户端学习——(六)网络连接检测
- 开源中国iOS客户端学习——(六)网络连接检测
- 开源中国iOS客户端学习——(六)网络连接检测
- ios学习(六) 网络连接检测
- 开源中国iOS客户端学习——(五)网络通信ASI类库(1)
- 开源中国iOS客户端学习——(五)网络通信ASI类库(1)
- 开源中国iOS客户端学习——(八)网络通信AFNetworking类库
- 开源中国iOS客户端学习——(八)网络通信AFNetworking类库
- 开源中国iOS客户端学习——(五)网络通信ASI类库(1)
- 开源中国iOS客户端学习——(五)网络通信ASI类库(1)
- 开源中国iOS客户端学习——(八)网络通信AFNetworking类库
- 开源中国iOS客户端学习——(八)网络通信AFNetworking类库
- 开源中国iOS客户端学习——(五)网络通信ASI类库(1)
- 开源中国iOS客户端学习——(八)网络通信AFNetworking类库
- 开源中国iOS客户端学习——(八)网络通信AFNetworking类库
- 开源中国iOS客户端学习——(八)网络通信AFNetworking类库
- 开源中国iOS客户端学习——网络通信AFNetworking类库
- 开源中国iOS客户端学习——序
- 100条使信号完整性问题最小化的通用设计原则
- 找出无序数组中最小的前k个数
- 100条估计信号完整性效应的经验法则
- 函数的设计
- ubuntu开启SSH服务
- 开源中国iOS客户端学习——(六)网络连接检测
- PL/SQL每日一题:异常处理--WHEN子句
- DevExpress下更改gridcontrol控件cardview的cardCaption标题
- 2012
- SQLite数据库
- android gridview左右滑动(二)
- 第三十七节 java学习——color类
- 全局变量与局部变量定义及存储小结
- 2013全国各地火车票起售时间(放票时间最新公布)