开源中国iOS客户端学习——(六)网络连接检测

开源中国iOS客户端基于网络同步数据,从而达到与网页看到同样数据效果,所以在启动程序的时候需要检查网络;这也是每一个联网应用启动的第一步,如果联网应用没有检查网络,苹果公司将不予以审核通过;

开源中国iOS客户端大牛们在写网络检测时很迷惑人,开始以为他们用的是ASI类库做的网络检测,今天才看明白,他们并不是用的ASI类库检测,而是用到AFNetworking这个类库里一个实例方法做网络连接检测;


先看Appdelegate文件:

在application:didFinishLaunchingWithOptions:方法里

  1. //检查网络是否存在如果不存在则弹出提示
  2. [ConfigInstance].isNetworkRunning=[CheckNetworkisExistenceNetwork];

在applicationDidBecomeActive:方法里

  1. -(void)applicationDidBecomeActive:(UIApplication*)application
  2. {
  3. [ConfigInstance].isNetworkRunning=[CheckNetworkisExistenceNetwork];
  4. if([ConfigInstance].isNetworkRunning==NO){
  5. UIAlertView*myalert=[[UIAlertViewalloc]initWithTitle:@"警告"message:@"未连接网络,将使用离线模式"delegate:selfcancelButtonTitle:@"确认"otherButtonTitles:nil,nil];
  6. [myalertshow];
  7. }
  8. }

都用到了[Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];再看看Config和CheckNetwork这两个类定义

Config类的Instance方法,

  1. staticConfig*instance=nil;
  2. +(Config*)Instance
  3. {
  4. @synchronized(self)
  5. {
  6. if(nil==instance)
  7. {
  8. [selfnew];
  9. }
  10. }
  11. returninstance;
  12. }
从字面意思也能推测出是给Cinfig类实例化用的,isNetworkRunning是BOOL型变量

CheckNetwork在ASIHttp文件里,和ASI类库放到一块的,(里面汉字出现乱码)

  1. +(BOOL)isExistenceNetwork
  2. {
  3. //BOOLisExistenceNetwork;
  4. //Reachability*r=[ReachabilityreachabilityWithHostName:@"www.oschina.net"];
  5. //switch([rcurrentReachabilityStatus]){
  6. //caseNotReachable:
  7. //isExistenceNetwork=FALSE;
  8. NSLog(@"娌℃湁缃戠粶");
  9. //break;
  10. //caseReachableViaWWAN:
  11. //isExistenceNetwork=TRUE;
  12. NSLog(@"姝e湪浣跨敤3G缃戠粶");
  13. //break;
  14. //caseReachableViaWiFi:
  15. //isExistenceNetwork=TRUE;
  16. NSLog(@"姝e湪浣跨敤wifi缃戠粶");
  17. //break;
  18. //}
  19. //returnisExistenceNetwork;
  20. returnYES;
  21. }
本来是使用苹果官方提供的Reachability来检测网络连接状况,但是大牛们又给注释掉了,return YES;

也就是[Config Instance].isNetworkRunning=YES;

但是当我把iMac网线拔掉运行的时候却能检测出网络无连接,通过查找 “错误 网络无连接”


发现他们都在AFNetworking类库

- (void)postPath:(NSString *)pathparameters:(NSDictionary *)parameterssuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))successfailure:(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值