IOS Reachability判断所请求服务器是否超时?
开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审查的。
Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。
1.在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。
2.然后将 SystemConfiguration.framework 添加进工程。
我使用的版本为 : Version: 2.2
我为Apple的例程增加了一个全局 -- ReachabilityAutoChecker
.h
@interface ReachabilityAutoChecker : NSObject @property (nonatomic, retain) Reachability *reachability;
@property (nonatomic, assign) NetworkStatus networkStatus;
@property (nonatomic, assign) BOOL connectionRequired; @end
.m文件
@implementation ReachabilityAutoChecker @synthesize reachability; + (id)sharedChecker
{
static ReachabilityAutoChecker *staticChecker = nil;
if (!staticChecker) {
staticChecker = [[ReachabilityAutoChecker alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:staticChecker selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
staticChecker.networkStatus = NotReachable;
staticChecker.connectionRequired = NO;
}
return staticChecker;
} - (void)reachabilityChanged:(NSNotification* )note
{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
self.networkStatus = [curReach currentReachabilityStatus];
self.connectionRequired = [curReach connectionRequired];
} @end
我为Apple的例程增加了一个Category -- Reachability (AutoChecker)
.h文件:
@interface Reachability (AutoChecker) + (void)startCheckWithReachability:(Reachability *)reachability;
+ (BOOL)isReachable; @end
.m文件:
@implementation Reachability (AutoChecker) + (void)startCheckWithReachability:(Reachability *)reachability
{
ReachabilityAutoChecker *checker = [ReachabilityAutoChecker sharedChecker]; if (checker.reachability) {
[checker.reachability stopNotifier];
checker.reachability = nil;
} checker.reachability = reachability;
[checker.reachability startNotifier];
} + (BOOL)isReachable
{
ReachabilityAutoChecker *checker = [ReachabilityAutoChecker sharedChecker]; if (!checker.reachability) {
NSLog(@"Check Reachability With No Reachability has been Set!");
return NO;
} NetworkStatus networkStatus = [checker networkStatus]; if(networkStatus == ReachableViaWiFi)
{
NSLog(@"WIFI");
}
if(networkStatus == ReachableViaWWAN)
{
NSLog(@"3G");
} BOOL connectionRequired = NO;
connectionRequired = [checker connectionRequired]; #if kShouldPrintReachabilityFlags
NSLog(@"NetworkStatus %d connectionRequired %d", networkStatus, connectionRequired);
#endif if (networkStatus)
return YES;
else
return NO;
} @end
调用方式:
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//检测某一特定站点的接续状况,可以使用下面的代码
Reachability *pReachability = [Reachability reachabilityWithHostName:@"appservices.comcsoft.com"];
//开始监控网络状态
[Reachability startCheckWithReachability:pReachability]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
ViewController.m
- (IBAction)upInside_checkNetStatus:(id)sender
{
if(![Reachability isReachable])
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"对不起,网络异常,请检查您的网络设置。"
delegate:self
cancelButtonTitle:@"好的"
otherButtonTitles:nil];
[alert show];
return;
}
}
运行时提醒下 : #error "此类需要在非arc环境下编译,请添加-fno-objc-arc标记"
网络正常 NSLog如下:
2013-07-05 14:15:53.084 PRJ_reachability[8153:11303] Reachability Flag Status: -R ------- networkStatusForFlags
2013-07-05 14:15:54.265 PRJ_reachability[8153:11303] WIFI
2013-07-05 14:15:54.266 PRJ_reachability[8153:11303] NetworkStatus 1 connectionRequired 0
PRJ_reachability.zip 例子下载地址:http://ishare.iask.sina.com.cn/f/37441462.html
百度云盘分享链接:http://pan.baidu.com/s/1o6qhQCa
IOS Reachability判断所请求服务器是否超时?的更多相关文章
- iOS中4种判断网络请求的方式(系统状态栏、AFNetworking、Reachability、自定义)
iOS 实时判断网络状态 方法一:利用系统状态栏判断网络状态 // 状态栏是由当前app控制的,首先获取当前app UIApplication *app = [UIApplication shared ...
- IOS Post请求(请求服务器)
@interface HMViewController () @property (weak, nonatomic) IBOutlet UITextField *usernameField; @pro ...
- IOS 请求服务器的方式
IOS 中请求服务器的方式主要有Get 和Post . Get :[1]向服务器发索取数据的一种请求; [2]获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改;请求的参数会跟在url后 ...
- Android使用HttpUrlConnection请求服务器发送数据详解
HttpUrlConnection是java内置的api,在java.net包下,那么,它请求网络同样也有get请求和post请求两种方式.最常用的Http请求无非是get和post,get请求可以获 ...
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
讲这个之前,我们先来说说get和post两种请求的区别吧!!! 1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.jsp?name=te ...
- PHP异步非阻塞fsockopen(本地可以非阻塞请求,服务器就一直执行异步的不成功) (未解决)
index.php /** * php异步请求 * * @param $host string 主机地址 * @param $path string 路径 * @param $param array ...
- Java通过Http请求服务器
Java通过Http请求服务器图片输出.下载.转换 Java开发过程中总会遇到从服务器中请求文件(图片.text文档等).此处详情记录从服务器下载图片的方法,以及以多种方式输出. 1.整体流程: 建立 ...
- HttpClient请求服务器代码优化版
HttpClient请求服务器代码优化版 首先,我在前面的两篇博文中介绍了在 Android中,除了使用java.net包下HttpUrlConnection的API访问HTTP服务之外,我们还可以换 ...
- PHP判断ajax请求:HTTP_X_REQUESTED_WITH
PHP判断ajax请求的原理: 在发送ajax请求的时候,我们可以通过XMLHttpRequest这个对象,创建自定义的 header头信息, 在jquery框架中,对于通过它的$.ajax, $.g ...
随机推荐
- Python抓取花瓣网高清美图
一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中. ...
- 自动安装jar包到本地仓库
参考博客:http://blog.csdn.net/m0_37797991/article/details/73394873
- [New Learn]被嫌弃的app的一生
1.简介 为什么叫被嫌弃的app的一生?致敬电影<被嫌弃的松子的一生>. 自学IOS东一锄西一镐的总感觉没有一个总的概念,还是多看看官网吧,先看一下一个app的整个生命周期,本文主要是翻译 ...
- Python中使用dom模块生成XML文件示例
在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件. 在生成XML文件中,我们主 ...
- WP评论系统更换小结(转)
第三方评论插件 多说 多说是一款追求极致体验的社会化评论框,可以用微博.QQ.人人.豆瓣等帐号登录并评论. 多说具备优质用户体验.速度和稳定性.社会化推荐.建站程序审核整合.垃圾评论过滤等特性. 自定 ...
- Centos7安装和配置NFS
(1)nfs简介 作用:通过网络的不同的主机之间共享资源,支持多节点挂载并发写入 特点:单台,适合小型网络集群架构,非常稳定:大型公司使用(mfs,glusterfs,fastdfs) nfs优点:部 ...
- OpenStack 计算服务 Nova计算节点部署 (九)
如果使用vmware虚拟机进行部署,需要开启虚拟化:如果是服务器需要在bios上开启. Nova Compute nova-compute 一般运行在计算节点上,通过Messages Queue接收并 ...
- 插入排序(InsertionSort)
算法描述 插入排序是在一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序.插入排序是一种稳定的排序. 基本思想 插入排序是在一个已经有序的小序列的基础上, ...
- web资料收集
Web安全资料:https://github.com/CHYbeta/Web-Security-Learning http://blog.pentestbegins.com/2017/07/21/ha ...
- 洛谷P1880 [NOI1995] 石子合并 [DP,前缀和]
题目传送门 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆 ...