前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理。最好能监听设备的网络状态的改变,当设备网络状态连接、断开时,程序也应该有相应的处理。

开发工具: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声明一个私有的成员变量:

@property (nonatomic,strong) Reachability *conn;

然后在ViewController.m中用conn创建一个Reachability对象,并且

[conn startNotifier]。

然后才能在ViewController.m中或者AppDelegate.m中设置自动监听网络状态的代码。

----------------------------------------------------------------------------------------------------------------------------------------------------------

以上是本人半年前的学习积累,其中关于最后的"另外补充"其实就是很基本的原因,就是没有使用property的全局作用使得Reachability只能作用于某个方法内部,从而会在程序运行过程中就会出现无效的结果。

下面是本人在2016年2月25日更新的网络监听代码使用快速一览

----------------------------------------------------------------------------------------------------------------------------------------------------------
 
 
 
 

iOS开发网络篇—Reachability检测网络状态的更多相关文章

  1. 李洪强iOS开发之使用 Reachability 检测网络

    1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用. 大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通 ...

  2. iOS网络4——Reachability检测网络状态

    一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...

  3. iOS开发UI篇-tableView在编辑状态下的批量操作(多选)

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  4. iOS中使用 Reachability 检测网络

    iOS中使用 Reachability 检测网络 内容提示:下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测.   写本文的目的 了解Reachability都 ...

  5. iOS开发多线程篇—线程的状态

    iOS开发多线程篇—线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(te ...

  6. iOS开发多线程篇—NSOperation基本操作

    iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...

  7. iOS开发拓展篇-XMPP简单介绍

    iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双 ...

  8. iOS开发多线程篇 10 —NSOperation基本操作

    iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...

  9. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

随机推荐

  1. Web程序员开发App系列 - 申请苹果开发者账号

    Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...

  2. 使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践--转载

    原文地址:https://wsgzao.github.io/post/elk/ 另外可以参考:https://www.digitalocean.com/community/tutorials/how- ...

  3. ASP.NET MVC3 在_ViewStart設定Layout後用RenderAction的注意事項

    ASP.NET MVC3 在_ViewStart設定Layout後用RenderAction的注意事項 3/24 TW MVC第一次活動圓滿的結束了,雖然是RC,但也來了不少願意聽我們分享的好朋友. ...

  4. iOS-金额小写转大写

    一.目的 1. 金额小写转化成大写. 如 123456.65 --> 壹拾贰万叁仟肆佰伍拾陆元陆角伍分 2. 只能处理13位数的金额,并且只能处理到小数点后两位. 二.代码 #import &q ...

  5. [python]python元类

    这两天在看Django框架,里面的filter实现原理搞不明白,最后发现跟python的元类有关系. 原文:http://stackoverflow.com/questions/100003/what ...

  6. 工作流数据库表设计-ASP.NET

    公司准备开发一套工作流引擎,以前没有什么OA开发经验,也是第一次设计工作流引擎,我把我的一些思路分享一下,希望得到些帮助或者能帮助到一些人. 产品的定位: 1.能够做到前后端分离 2.可以做到项目的分 ...

  7. Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配

    一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...

  8. Winform开发框架之客户关系管理系统(CRM)的报价单和销售单的处理

    在前面介绍了很多CRM相关的界面和实现思路的随笔文章,本篇继续介绍一下系统中用到的一些经验和技巧片段.本篇随笔主要介绍客户关系管理系统(CRM)的报价单和销售单的处理界面效果,使用列表内置的选择代替弹 ...

  9. TCP和UDP之间的区别

    TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等 ...

  10. 【C#】OOP之多态那点事

    前言: 对菜鸟开发者的忠告:花一万个小时练习 Coding,不要浪费一万小时无谓地 Debugging(也就说看代码) 看上面的UML图,我们创建一个抽象的Instrument类,类中有一个抽象方法p ...