2012-03-30 87 views
1

我试图让我的iPhone应用程序更健壮,确保它不会在没有网络连接时崩溃。现在,应用程序尝试立即通过应用程序委托在启动时建立连接。如果WiFi或手机可用,它没有问题,但如果没有可见的网络连接,它将会崩溃。我在这个网站上四处浏览,并没有发现任何适合我的问题的东西。我有一种感觉,应该是代码只是一个简单的线条,像Objective-C的相当于伪“isConnection”,或其他类似的:ios诊断iphone连接状态

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

可达性类非常易于使用。下载类文件在这里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 
} 
+0

谢谢,这非常好!正是我在找什么。 – pereirap 2012-04-09 02:35:04

+0

为什么你不接受我的答案?你接受的人发布了一个项目链接,但没有示例代码。 – Justin 2012-04-13 19:43:52

+0

对不起 - 我甚至都没有意识到我所做的 - 你的回答也有助于我对这个问题的理解。我甚至不知道什么是不接受的意思......好的,那是绿色的复选标记吗?我现在就检查一下,让我知道如何撤消我所做的任何事情!我根本不是故意要解雇你的!抱歉!我只是这个网站关心的一个新手。 – pereirap 2012-04-13 21:30:06

0

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

尽管在启动上面描述的代码之前,您可以使用它来检查连接状态,但我仍然认为您应该调查为什么当您没有连接时应用程序崩溃并尝试解决它。在请求尝试过程中,您可能会始终失去连接,而且您也不希望导致应用程序崩溃。