10

我已将 Apple 的 Reachability 示例合并到我自己的项目中,因此我知道我是否有网络连接 - 如果我没有网络连接,我不会费心发送和请求。我决定使用状态通知实现,因为它似乎更容易在后台更新可达性并立即获得当前结果,而不是在我想建立网络连接时启动同步请求。

我的问题是,当我在 EDGE 网络上时,我开始收到误报 - 手机有连接,但应用程序认为情况并非如此。我的理解是当 EDGE 连接时您不会收到通知,所以我的假设是我在某个时候丢失并重新获得了连接。重新启动应用程序通常足以看到网络连接。

这不是最佳解决方案,所以我想知道是否有其他人遇到过这个问题并对解决方案有任何想法。

(我不知道这是否也适用于 3G;我正在运行第一代 iPhone)。

4

2 回答 2

14

对于检测 Wi-Fi,可达性通知对我来说似乎也不可靠。所以我只使用轮询。每 5 秒检查一次似乎没有什么坏处。

- (void) checkReachability {
    BOOL connected = ([[Reachability sharedReachability] localWiFiConnectionStatus] == ReachableViaWiFiNetwork);

    // Do something...

    [self performSelector:@selector(checkReachability) withObject:nil afterDelay:5.0];
}
于 2008-10-08T06:18:50.620 回答
1

网上有一个很好的可达性示例。它工作得非常好: http ://servin.com/iphone/iPhone-Network-Status.html

但是你看,当我尝试以自己的方式使用它时,它只是炸弹。

尝试使用以下方法实现它:

NSString *sCellNetwork;     
 NSString *sNetworkReachable;  

if (flags & kSCNetworkFlagsReachable || flags & kSCNetworkReachabilityFlagsIsWWAN)

{do it} 

 else {
   Network fail alert; 
}
于 2011-08-12T06:18:04.237 回答