我知道这个问题似乎是许多其他问题的愚蠢,但是,我觉得这个简单的案例并没有得到很好的解释.来自Android和BlackBerry背景,HTTPUrlConnection如果没有可用连接,立即发出请求失败.这似乎是完全理智的行为,我很惊讶地发现NSURLConnection在iOS中没有效仿它.
我知道Apple(以及其他扩展它的人)提供了一个Reachability帮助确定网络状态的类.我很高兴第一次看到这一点并完全期望看到类似的内容bool isNetworkAvailable(),但令我惊讶的是,我发现了一个复杂的系统,需要通知注册和回调,以及一堆看似不必要的细节.肯定有更好的办法.
我的应用程序已经优雅地处理连接失败,包括没有连接.用户会收到失败通知,然后应用程序继续运行.
因此我的要求很简单:我可以在所有HTTP请求之前调用单个同步函数来确定我是否应该打扰实际发送请求.理想情况下,它不需要设置,只返回一个布尔值.
这在iOS上真的不可能吗?
Apple 已经创建了那个著名的 Reachability 类,但是查看代码我不太信任它。格式和标题很乱。
它也无法帮助显示“您没有互联网!” 警报。
我只想做:
在某些时候下载一个 XML。
当没有互联网时,显示警报。
当下载 XML 时 Internet 断开连接,显示警报。
在我的应用程序中,用户没有点击下载按钮,这一切都在后台自动发生。
就是这样。真的。我现在在 Reachability 上花了 3 个小时,我的大脑拒绝了它。
有人用干净的标题和干净的代码创建了一个聪明的替代方案吗?使用起来非常简单的东西?
我在iPhone4上使用iOS4.1.我也在使用最新版本的Reachability代码.我的设备没有连接,但似乎代码等待超时,否则设备需要很长时间才能报告可达性状态.
这似乎不会发生在使用iPhone3gs的iOS4.0.1上.
还有其他人遇到过这个吗?除了开始一个新线程之外,有什么方法可以绕过它吗?