嗨,我正在尝试检查我的应用程序中的互联网连接。所以我已经在项目中导入了可达性h文件和m文件。我现在遇到了一些问题。只有在没有网络连接的情况下才能使用互联网连接才能正常工作..
这里是使用过的代码..
-(BOOL)reachable {
Reachability *reach = [Reachability reachabilityWithHostName:@"https://www.google.co.in/"];
NetworkStatus internetStatus = [reach currentReachabilityStatus];
if(internetStatus == NotReachable) {
UIAlertView *alertOne = [[UIAlertView alloc]initWithTitle:@"Internet" message:@"You dont have internet connection to send message" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"ok", nil];
[alertOne show];
[alertOne release];
}
return YES;
}
我已经在其他项目中使用了相同的代码,但是在这里它显示了互联网连接时的警报信息,当它没有连接时它没有显示...
这个viewdidload代码......
[super viewDidLoad];
[self reachable];
请告诉我如何解决这个问题......
感谢
答案 0 :(得分:1)
这可能不是问题的原因,但在reachable
中呼叫viewDidLoad
并且始终是错误的。原因是viewDidLoad
方式太早,无法调用可能会显示警报视图的代码。在viewDidLoad
中,您的视图尚未出现在界面中。
另一个非常奇怪的事情是你的reachable
方法都检测到可达性并提出警报。它返回一个BOOL,但你扔掉它。你应该说
if (![self reachable]) { // ...
并在那里放置警报视图,而不是reachable
方法。
另一个非常奇怪的事情是,reachable
方法总是返回YES。那太疯狂了。如果URL可以访问,则应返回YES,否则返回NO。否则,返回BOOL的重点是什么?
答案 1 :(得分:1)
尝试以下代码
Reachability *reach = [Reachability reachabilityForInternetConnection];
//(or)
Reachability *reach = [Reachability reachabilityWithHostName:@"http://www.google.com"];
NetworkStatus netStatus = [reach currentReachabilityStatus];
if (netStatus != NotReachable)
{
//Reachable ..Network connection is available
}
else
{
//NSLog(@"Network Error No Network Available ");
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"Please connect to an Internet connection to Register" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil , nil];
[alertView show];
}
它适合你...
答案 2 :(得分:-1)
请按照以下步骤操作
1>制作可达性和NetworkStatus的属性;
在你的appDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate>{
Reachability* reachability;
NetworkStatus remoteHostStatus;
}
@end
2&gt;在applicationDidBecomeActive
中更改可达性时创建通知方法 - (void)applicationDidBecomeActive:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name:kReachabilityChangedNotification
object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable) {
if(DEBUG_MODE){NSLog(@"no");}
}
else if (remoteHostStatus == ReachableViaWiFi) {if(DEBUG_MODE)
{NSLog(@"wifi");}
}
else if (remoteHostStatus == ReachableViaWWAN) {if(DEBUG_MODE){NSLog(@"cell");}
}
}
3&GT;声明reachabilityChanged
-(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags
{
if([self isReachableWithFlags:flags])
{
if(self.reachableBlock)
{
self.reachableBlock(self);
}
}
else
{
if(self.unreachableBlock)
{
self.unreachableBlock(self);
}
}
// this makes sure the change notification happens on the MAIN THREAD
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] postNotificationName:kReachabilityChangedNotification
object:self];
});
}
感谢。