iOS开发之网络连接检测
2015-12-14 22:24
609 查看
开源中国iOS客户端基于网络同步数据,从而达到与网页看到同样数据效果,所以在启动程序的时候需要检查网络;这也是每一个联网应用启动的第一步,如果联网应用没有检查网络,苹果公司将不予以审核通过;
开源中国iOS客户端大牛们在写网络检测时很迷惑人,开始以为他们用的是ASI类库做的网络检测,今天才看明白,他们并不是用的ASI类库检测,而是用到AFNetworking这个类库里一个实例方法做网络连接检测;
先看Appdelegate文件:
在application:didFinishLaunchingWithOptions:方法里
[cpp] view
plaincopy
//检查网络是否存在 如果不存在 则弹出提示
[Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];
在applicationDidBecomeActive:方法里
[cpp] view
plaincopy
- (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方法,
[cpp] view
plaincopy
static Config * instance = nil;
+(Config *) Instance
{
@synchronized(self)
{
if(nil == instance)
{
[self new];
}
}
return instance;
}
从字面意思也能推测出是给Cinfig类实例化用的,isNetworkRunning是BOOL型变量
CheckNetwork在ASIHttp文件里,和ASI类库放到一块的,(里面汉字出现乱码)
[cpp] view
plaincopy
+(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对象,描述网络或解析错误状况;
所以才有了上面截图中网络的连接检测,拿源码中一处来举例
开源中国iOS客户端大牛们在写网络检测时很迷惑人,开始以为他们用的是ASI类库做的网络检测,今天才看明白,他们并不是用的ASI类库检测,而是用到AFNetworking这个类库里一个实例方法做网络连接检测;
先看Appdelegate文件:
在application:didFinishLaunchingWithOptions:方法里
[cpp] view
plaincopy
//检查网络是否存在 如果不存在 则弹出提示
[Config Instance].isNetworkRunning = [CheckNetwork isExistenceNetwork];
在applicationDidBecomeActive:方法里
[cpp] view
plaincopy
- (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方法,
[cpp] view
plaincopy
static Config * instance = nil;
+(Config *) Instance
{
@synchronized(self)
{
if(nil == instance)
{
[self new];
}
}
return instance;
}
从字面意思也能推测出是给Cinfig类实例化用的,isNetworkRunning是BOOL型变量
CheckNetwork在ASIHttp文件里,和ASI类库放到一块的,(里面汉字出现乱码)
[cpp] view
plaincopy
+(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对象,描述网络或解析错误状况;
所以才有了上面截图中网络的连接检测,拿源码中一处来举例
相关文章推荐
- 深入理解计算机系统 1.8 系统通过网络与其它系统交流
- 社交网络节点理论
- Http Cookie/Session机制详解
- 网络请求 同步get 同步post 异步get 异步post
- 上Https 和 http 差分
- App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.
- Chrome以https访问gitlab的问题:Your connection is not private
- SGU 242. Student's Morning( 网络流 )
- bzoj1497[NOI2006]最大获利
- 为什么深层神经网络难以训练
- 网络爬虫:爬取动态网页(例如javascript)
- 一些简单的网络流模型
- Http中Set-Cookie
- 简述tcp与udp的相同和不同
- 技术向:一文读懂卷积神经网络
- [Servlet&JSP] HttpSession会话管理
- core.min.js:36 XMLHttpRequest cannot load http://【地址】. No 'Access-Control-Allow-Origin' header is pr
- "http://schemas.xmlsoap.org/wsdl/", the namespace on the "definitions" element, is not a valid SOAP
- 异步的方式查看网络图片
- 计算机网络笔记(二)谢希仁版