Я разрабатываю приложение iOS, которое необходимо проверить, доступно ли подключение к Интернету или нет в его нескольких классах ViewController. Чтобы проверить подключение к сети, я использую (Reachability library by Tony Million).Использование блока Reachibility в AppDelegate для проверки возможности подключения во всем приложении
Вот что я делаю прямо сейчас. В классе 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 работают как цикл снова и снова. Я не уверен, что я сделал что-то не так в своих кодах, поэтому ожидаю комментариев от экспертов.
В любом случае, я думаю, что это альтернативное решение для решения этой проблемы и делает коды более чистыми и стабильными. Я хочу знать от экспертов, если это хороший подход. Я хочу сохранить переменную BOOL в AppDelegate с именем isNetworkConnected. Затем в - (BOOL) приложение: (UIApplication *) приложение 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
}
Вот и все. Я хочу знать, хороша или плохая моя идея, если я ошибаюсь, или любое лучшее предложение будет высоко оценено. Заранее спасибо.
Проверьте этот ответ. Вы можете проверить доступность во всех viewControllers. http://stackoverflow.com/questions/1083701/how-to-check-for-an-active-internet-connection-on-iphone-sdk – nsgulliver
Спасибо, я уже видел это раньше. И я использую решение выше из самого голосованного ответа. Я просто пытаюсь сделать переменную связности Gloabal в приложении, чтобы мне не нужно было использовать целые блоки снова и снова в каждом ViewController. – ayon