在服务请求之前使用可达性api检查网络连接。有时当网络太弱时,它会挂起我的应用程序,一段时间后我得到状态。如果我立即关闭我的WiFi,我得到状态和网络时是正确的,然后我也立即得到状态但是当网络很弱时(我的假设)它没有立即给出状态,因此给用户假设应用程序被冻结并且在某个时候给出了状态网络已关闭。如何告诉用户应用程序没有冻结,但它正在检查是否可达?
InternetConnection *ic=[[InternetConnection alloc] init];
if([ic connectedToNetwork])
{
//do some request
}
else
{
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@""
message:@"Network down"
delegate:nil
cancelButtonTitle:AGLocalizedString(@"key_ok",nil)
otherButtonTitles:nil];
[alert show];
}
//check internet connection code
- (BOOL) connectedToNetwork{
Reachability* reachability = [Reachability reachabilityWithHostName:@"google.com"];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable)
{
isInternet =FALSE;
}
else if (remoteHostStatus == ReachableViaWWAN)
{
isInternet = TRUE;
}
else if (remoteHostStatus == ReachableViaWiFi)
{ isInternet = TRUE;
}
return isInternet;
}
答案 0 :(得分:0)
看起来你正在调用一个只能异步调用的函数synchronously
。这是你永远不应该做的事情 - 你看到了结果。
您需要一个存储当前已知状态的对象,该状态已连接,未连接或未知。然后创建一个Reachability
对象,在后台检查其状态,并要求它观察更改。
并确保您正确测试,并且不要给用户一连串的警报;他们不会高兴。