iOS开发网络篇—Reachability检测网络状态
前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理。最好能监听设备的网络状态的改变,当设备网络状态连接、断开时,程序也应该有相应的处理。
开发工具:xcode6.3.2 操作系统:OS X Yosemite10.10.4 学习来源:《疯狂IOS讲义(下)》中的ios网络应用编程
1、下载,添加Reachability类。
官网下载网址:
https://developer.apple.com/library/prerelease/ios/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2
获取下载的zip文件包找到里面的:reachability.m和reachability.h然后放进工程下:
2、
添加SystemConfiguration.framework框架
然后打开Main.storyborad界面设计文件,添加1个UILabel、1个UITextField和3个UIButton,并将它们摆放整齐,如图:
为了在程序钟访问界面上的文本框,可以将文本框绑定到siteField IBOulet属性;为了让程序能响应界面上3个按钮的点击事件,还需要为“测试”按钮的“Touch Up Inside”事件绑定testNetStatus事件处理方法,为“测试wifi”按钮的“Touch Up Inside”事件绑定testWifi事件处理方法,为了“测试3G/4G”按钮的“Touch Up Inside”事件绑定testInternet事件处理方法。
3、实现网络监听以及按钮测试的代码:
要点:
<1>如果是要自动监听手机联网的状态,就需要使用默认的通知中心对象[NSNotificationCenter defaultCenter]来通过监听
kReachabilityChangedNotification通知,并且当通知中心收到通知,就触发另一个自定义的成员方法的reachabilityChanged:方法。
源代码写法:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(netChanged:) name:kReachabilityChangedNotification
object:nil];
<2>然后是不管是在上面创建通信中心之后,还是在为按钮组件的触发点击事件绑定的代码中,都要创建一个网络可达型对象(有两种):
-1-Reachability *reach = [Reachability reachabilityWithHostName:”www….”]
-2-Reachability *reach =[Reachability reachabilityForInternetConnection]
<3>然后通过Reachability对象获取当前网络状态:
[reach currentReachabilityStatus]
这个方法返回的就是Reachability声明中声明了的枚举三个枚举值:
typedef enum : NSInteger { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN } NetworkStatus; |
也就是说这三个值代表着网络连接三种状态。
另外补充:
很奇怪的是:和《疯狂IOS讲义下》(8.1检测网络状态)提供的源代码不一样的地方是以上网络状态除了绑定组件监听事件,也就是自动监听网络状态的代码可以仅仅写在托管类AppDelegate.m中就可以运行,ViewController.m可以不写任何代码就可以运行。
但是自己新建的oc程序,然后按照同样的步骤压迫实现同样效果却需要额外的条件:
必须在ViewController.h声明一个私有的成员变量:
然后在ViewController.m中用conn创建一个Reachability对象,并且 [conn startNotifier]。 |
然后才能在ViewController.m中或者AppDelegate.m中设置自动监听网络状态的代码。
----------------------------------------------------------------------------------------------------------------------------------------------------------
以上是本人半年前的学习积累,其中关于最后的"另外补充"其实就是很基本的原因,就是没有使用property的全局作用使得Reachability只能作用于某个方法内部,从而会在程序运行过程中就会出现无效的结果。
下面是本人在2016年2月25日更新的网络监听代码使用快速一览

iOS开发网络篇—Reachability检测网络状态的更多相关文章
- 李洪强iOS开发之使用 Reachability 检测网络
1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用. 大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通 ...
- iOS网络4——Reachability检测网络状态
一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...
- iOS开发UI篇-tableView在编辑状态下的批量操作(多选)
先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...
- iOS中使用 Reachability 检测网络
iOS中使用 Reachability 检测网络 内容提示:下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Reachability都 ...
- iOS开发多线程篇—线程的状态
iOS开发多线程篇—线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(te ...
- iOS开发多线程篇—NSOperation基本操作
iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...
- iOS开发拓展篇-XMPP简单介绍
iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双 ...
- iOS开发多线程篇 10 —NSOperation基本操作
iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...
- iOS 开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
随机推荐
- hash函数为什么要选择对素数求余?
常用的hash函数是选一个数m取模(余数),这个数在课本中推荐m是素数,但是经常见到选择m=2^n,因为对2^n求余数更快,并认为在key分布均匀的情况下,key%m也是在[0,m-1]区间均匀分布的 ...
- Android 学习笔记之数据存储SharePreferenced+File
学习内容: Android的数据存储.... 1.使用SharedPreferences来保存和读取数据... 2.使用File中的I/O来完成对数据的存储和读取... 一个应用程序,经常需要与用 ...
- 利用session做国际化引起的old区内存爆满及修复方法
题记:昨天加班打车回家,看见前面有辆路虎在高速上开的巨慢,挡住了我坐的出租车的路,于是就跟司机吐槽了一句:“前面这车怎么这么面啊?”,司机沉默了大概3秒,说了一句富含哲理性的话:“没有面车,只有面人” ...
- [C#高级编程]基础知识摘要一
核心C#: 值类型存储在堆栈中,而引用类型存储在托管堆上. object类型可以用于两个目的: 可以使用object引用绑定任何子类型的对象 object类型执行许多一般用途的基本方法,包括Equal ...
- 用Qt写软件系列四:定制个性化系统托盘菜单
导读 一款流行的软件,往往会在功能渐趋完善的时候,通过改善交互界面来提高用户体验.毕竟,就算再牛逼的产品,躲藏在糟糕的用户界面之后总会让用户心生不满.界面设计需综合考虑审美学.心理学.设计学等多因素, ...
- SQL查询语言练习
USE master GO IF EXISTS (SELECT * FROM sysdatabases WHERE name='MyStudentInfoManage') DROP DATABASE ...
- asp.net mvc中包含webapi时,token失效产生302的解决方案
public void ConfigureAuth(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOpt ...
- sql date()函数,时间格式
(1).GETDATE() 函数从 SQL Server 返回当前的日期和时间. 语法 GETDATE() 实例 下面是 SELECT 语句: SELECT GETDATE() AS CurrentD ...
- 创建Google网站地图Sitemap.xml
Sitemap.xml是google搞出来的,也就是网站地图,不过这个网站地图是用xml写的,而且要按google的标准来写,并且要将写出来的这个文件sitemap.xml上传到自己的服务器空间中去. ...
- 以对象的方式来访问xml数据表(一)
所有实例代码都是以C#演示—— 在将如何以对象的方式来访问xml数据表之前,我们先来谈谈如何用xml文件作为数据库吧! 平时在开发一些小的应用的时候,需要一个数据库,这个时候虽然可以用SQL serv ...