我在this answer之后实施了可达性课程。 我有两个不同的问题,希望对你有帮助......
我已将notifier放在viewDidLoad中:
(void)viewDidLoad
{
[super viewDidLoad];
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
internetReachable = [Reachability reachabilityForInternetConnection];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"];
[hostReachable startNotifier];
}
我在viewDidAppear中检查互联网连接:
(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
//check connection when access to the view
if (internetActive)
{
[self loadData];
}
else
{
UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:@"Internet connection not available" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
}
}
第一个问题:如何第一次检查互联网连接
第一次访问视图时,如果互联网连接正常,也会显示警报。我认为这是因为通知程序尚未收到有关连接的通知。如何管理?
第二个问题:如果连接状态发生变化(即从无到有),通知人员不会就此建议
如果我在没有互联网连接的情况下启动应用程序,则会正确显示警报。但是,如果互联网再次可用,则每次访问该视图时都会继续显示警报,因为互联网可用性的更改未被截获。我认为这是由于在同一个线程上执行通知程序。如何实现此连接检查以拦截连接状态更改?
先谢谢你,新年快乐, yassa
答案 0 :(得分:0)
您的怀疑是正确的,通常在同一个运行循环中调用viewDidLoad
和viewDidAppear
方法,这意味着在viewDidAppear
之前您不会收到任何通知
修改强>
我不确定这是否有效,因为我现在没有xcode:
在收到任何通知之前,请尝试使用[internetReachable currentReachabilityStatus]
和[hostReachable currentReachabilityStatus]
检查当前状态。
如果您的代码仍然与the answer you linked相同,则只需在[self checkNetworkStatus:nil]
或viewDidLoad
中致电viewDidAppear
,然后再检查internetActive
标记