ios诊断iphone连接状态

时间:2012-03-30 17:23:16

标签: ios crash connection

我正在尝试通过确保在没有网络连接时它不会崩溃来使我的iPhone应用程序更加强大。现在,应用程序尝试通过应用程序委托立即在启动时建立连接。如果wifi或蜂窝电话可用,它没有问题,但如果没有可见的网络连接,它将崩溃。我在这个网站上环顾四周,并没有发现任何非常适合我的问题。我觉得它应该只是一个简单的代码行,比如一个类似于伪'isConnection'的Objective-c,或类似的东西:

if (isConnection) {
    - sendSynchronousRequest for json data I'm using
    - manipulate the data, etc., and continue with normal operations
} else {
    - send an output message to a view controller, 
      letting the user know what's wrong.
}

我似乎无法隔离我正在寻找的(无可否认的抽象)“isConnection”条件,特别是。有没有人对这个主题有经验或建议?

2 个答案:

答案 0 :(得分:0)

您可以使用Apple在Reachability sample application中提供的Reachability类。它不仅会告诉您是否已连接,还有如何连接(WiFi,蜂窝电话或根本没有连接)。您甚至可以在连接状态发生变化时注册通知。

即使您可以在启动上述代码之前使用它来检查连接状态,但我仍然认为您应该调查在没有连接时应用崩溃的原因,并尝试解决它。您可能总是在请求尝试过程中失去连接,并且您不希望这会使应用程序崩溃。

答案 1 :(得分:0)

可达性类非常易于使用。在此处下载课程文件https://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

您还需要添加SystemConfiguration.framework

以下是您需要的代码:

-(BOOL)isConnection {
    Reachability *reach = [Reachability reachabilityWithHostName:@"www.google.com"];
    //replace www.google.com with your own host you're checking for
    NetworkStatus hostStatus = [reach currentReachabilityStatus];
    if (hostStatus != NotReachable) {
        //There are also other status enums like
        //ReachableViaWiFi
        //ReachableViaWWAN (3G/LTE)
        //if you need to detect if user is on cellular, act accordingly
        return YES;
    }
    return NO;
}

然后你可以打电话给你的方法:

if ([self isConnection]) {
    //do something
} else {
    //no connection, inform user
}