我正在尝试通过确保在没有网络连接时它不会崩溃来使我的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”条件,特别是。有没有人对这个主题有经验或建议?
答案 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
}