iOS开发之网络连接检测
来源:互联网 发布:单片机usb转串口 编辑:程序博客网 时间:2024/06/06 03:33
开源中国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;
- }
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;
- }
也就是[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对象,描述网络或解析错误状况;
所以才有了上面截图中网络的连接检测,拿源码中一处来举例
- iOS开发之检测网络连接状态
- iOS开发之网络连接检测
- iOS开发之网络检测
- iOS开发之网络检测
- iOS开发之网络检测
- IOS开发中如何检测网络连接
- ios网络连接检测
- iOS 检测网络连接
- iOS开发实践之网络检测Reachability
- [IOS 开发] AFNetworking2.2 setReachabilityStatusChangeBlock检测网络连接状态
- IOS检测网络连接状态
- IOS检测网络连接状态
- IOS检测网络连接状态
- IOS检测网络连接状态
- IOS检测网络连接状态
- ios检测有无网络连接
- IOS检测网络连接状态
- IOS检测网络连接状态
- centos 6.7 中文乱码 系统设为gbk
- 强大的浏览器插件vimperator
- MySql与SqlServer的一些常用用法的差别
- 虾米收藏音乐迁移到网易云音乐方法及工具
- Servlet基础(四:统计登录人数)
- iOS开发之网络连接检测
- [译]An Approach to Game Design
- URL之开源项目的在线网址
- could not resolve the connect identifier specified
- 绘制sin曲线
- Android:Sqlite 常见两个类SQLiteOpenHelper,SQLiteDatabase 随记
- bug 总结
- 基于背景建模方法处理视频(常用的函数)
- iOS开发之CDiscreetNotificationView