如何使用iOS可达性

我正在开发一个使用networking的iPhone应用程序。 iPhone通过HTTP请求与我的服务器通信,应该在WiFi和3G上工作。
我目前使用NSURLConnection initWithRequest向我的服务器发送asynchronous请求,并获得响应(但我很快将移动到ASIHTTPRequest库)

我明白,与这种types的应用程序(需要互联网连接的应用程序),我应该(必须)使用可达性。

在search网页并查看Apple的Reachability示例代码后,我仍然不明白一些基本的东西:

可达性的主要目的是什么?

在苹果的例子中,他们检测与主机,WiFi和3G的networking问题,并向用户呈现适当的消息。
这是Reachability的主要目的,向用户显示一条消息? 还是我需要使用它为更实际的情况? 例如,如果NSURLConnaction请求失败,我需要使用Reachability以某种方式重新发送请求?

可达性的正确使用是什么?

在应用程序启动时仅使用一个实例是否很常见,然后再听networking更改? 还是应该在每个networking请求之前检查自己的可达性状态?
是否足够使用reachabilityWithHostName还是我还需要reachabilityForLocalWiFireachabilityForInternetConnection

还有一件事 ,我明白苹果可以拒绝使用networking的应用程序,而不使用可达性。
我应该执行什么“ 必须 ”做的方法?
只是通知用户目前没有互联网就足够了吗?

Reachability是一个networking辅助工具类,用于获取有关连接状态的各种信息

可达性的主要目的是什么?

  • 可达性用于查询networking状态
  • 并注册您的听众,以获知连接改变时通知

这是Reachability的主要目的,向用户显示一条消息?

当然,它的主要用途是testing是否有互联网连接,或者在连接改变时得到通知

例如,如果NSURLConnaction请求失败,我需要使用Reachability以某种方式重新发送请求?

是的,你可以使用它,例如,我通常在我的项目中做的是保存所有的请求已经到远程服务器,可以说我想下载10个文件,

当任何文件由于没有互联网连接的下载过程失败,我将它们保存到一个失败的下载数组,

当可达性告诉我,互联网连接已经恢复,我遍历这个数组,并重新开始下载过程

可达性的正确使用是什么?

这取决于你的模式和需求。

在应用程序启动时仅使用一个实例是否很常见,然后再听networking更改?

是的,这是我做的,在我的项目中,我只有一个下载pipe理器类的实例,这个类有唯一的活动实例的可达性

还是应该在每个networking请求之前检查自己的可达性状态?

你可以做到这一点,没有多个Reachability实例,我通常做的是在我的下载pipe理器中有一个方法,告诉我如果有连接或没有连接,使用Reachability。

是否足够使用reachabilityWithHostName还是我还需要reachabilityForLocalWiFi和reachabilityForInternetConnection?

我不知道这个,但我通常做的是testing连接的所有手段,我不区分3G或WiFi,但有一些实现,这个信息(无线或3G)可能是有用的

可达性是苹果公司的一个例子。 人们使用它作为SystemConfiguration框架上的API。 正如你已经看到有方法来检查主机是否可到达等。

我使用Reachabilty项目的方式是我已经做了一个类的方法,返回一个布尔值,如果我请求数据的主机是可用的。 如果是,则方法返回YES ,如果不是,则返回NO (显然)。

现在,在我正在使用连接的应用程序中,您需要/应该检查是否可以像Apple文档所述的那样启动连接。 我有一个简单的, if然后显示一个适当的警报消息,该请求目前无法完成。

没有要求,如果请求不能在第一次执行,你应该自动再次尝试。 这样做的主要目的是保持您的应用程序远离崩溃,并同时向用户发送无法完成的消息。

我自己并不使用通知,但那是因为我不感兴趣监视是否可以进行连接。 这是你必须根据你的应用需求来决定的。

你不是被迫使用Reachabliti类中的所有方法,使用其中的一个就足够了。 它logging了不同的方法提供什么,什么时候在头文件中被使用。

请记住包含SystemConfiguration框架。

可达性可以最好地猜测互联网是否可达。 它告诉你是否可以通过WiFi访问,或只能通过移动数据访问。 不能保证是正确的。 如果它说你有一个WiFi连接,该连接可能会在一秒钟后丢失。 find访问URL是否有效的唯一方法是进行访问,看看会发生什么。 有些情况下访问将工作时,可达性说,不,反之亦然。

下面是我使用Reachibility的原因:下载失败后,因为没有互联网连接,当Reachability检测到一个变化(实际上几秒钟后,我们会开始重试; URL访问常常在Reachability表示WiFi返回后立即失败)。 在移动数据不允许下载失败后,请检查移动数据是否可用,然后要求用户允许使用移动数据。