我正在开发一个需要检查 Internet 连接是否可用的 iOS 应用程序,它的几个 ViewController 类。为了检查网络连接,我正在使用(Tony Million 的可达性库)。
这就是我现在正在做的事情。在需要连接检查的 ViewController 类中,我在 ViewDidLoad 处使用此代码块...。
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];
reach.reachableBlock = ^(Reachability*reach)
{
NSLog(@"REACHABLE!"); // Load offline data from core data
};
reach.unreachableBlock = ^(Reachability*reach)
{
NSLog(@"UNREACHABLE!"); // Fetch data from Rest Api
};
[reach startNotifier];
但是当网络状态发生变化并且我的应用程序位于此 ViewController 中时,我会遇到一些意外行为,例如有时从 api 获取数据会一次又一次地像循环一样运行。我不确定我的代码是否做错了什么,所以期待专家的评论。
无论如何,我正在考虑一种替代解决方案来解决这个问题并使代码更清洁和稳定。我想从专家那里知道这是否是好的方法。我想在 AppDelegate 中保留一个名为 isNetworkConnected 的 BOOL 变量。然后在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中,我想运行上面的代码并在其中设置变量 isNetworkConnected YES/NO。所以,代码将是这样的......
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];
reach.reachableBlock = ^(Reachability*reach)
{
NSLog(@"REACHABLE!");
isNetworkConnected = YES ;
};
reach.unreachableBlock = ^(Reachability*reach)
{
NSLog(@"UNREACHABLE!");
isNetworkConnected = NO ;
};
[reach startNotifier];
// rest codes....
}
然后,在我的 ViewController 中,我会这样做......
if(appdelegate.isNetworkConnected == YES){
// Fetch data from api
} else{
// Load offline data from Core data
}
而已。我想知道我的想法是好是坏,如果我犯了任何错误或任何更好的建议将不胜感激。提前致谢。