Подтвердить что ты не робот

Сценарий AFNetworking и No Internet Connection

Я использую AFNetworking в своем приложении для каждого запроса (например, для входа в систему, получения данных из URL-адреса и т.д.).

Возьмите это, например: пользователь нажимает кнопку входа в систему, и там нет соединения, как мгновенно отображать UIAlertView, который говорит об ошибке? Способ только состоит в том, чтобы подождать таймаут запроса и выполнить блок failure? Разве нет способа мгновенно проверить, есть ли соединение или нет?

Спасибо!

4b9b3361

Ответ 1

Начиная с версии 0.9, AFHTTPClient действительно имеет встроенную доступность сети (более простой интерфейс для вышеупомянутого кода Reachability от Apple). Просто включите фреймворк SystemConfiguration и используйте -setReachabilityStatusChangeBlock:, чтобы указать ответ при изменении состояния достижимости.

Ответ 2

С AFNetworking это шаги, которые нужно выполнить, чтобы воспользоваться преимуществами setReachabilityStatusChangeBlock: после добавления классов AFNetworing -

  • Добавить SystemConfiguration.framework в ваш проект
  • В файле pch добавьте #import <SystemConfiguration/SystemConfiguration.h>
  • Предполагая, что у вас есть подкласс AFHTTPClient в этом подклассе, добавьте ниже строки кода в функцию init -
[self setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSLog(@"changed %d", status);
        //your code here
    }];

Ответ 3

Возможно, вы могли бы использовать "Досягаемость", чтобы определить, подключено ли устройство к сети. Вот ссылка на Apple Doc.: Reachability

Например:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable) {
  //Your UIAlertView
}

Ответ 4

Я использую AFNetworkingOperationDidFinishNotification. Каждый раз, когда запрос HTTP будет терпеть неудачу, появляется предупреждение и информирует пользователя

- (void)addNetworkObserver
{
   [[NSNotificationCenter defaultCenter] addObserver:self
                                            selector:@selector(HTTPOperationDidFinish:) 
                                                name:AFNetworkingOperationDidFinishNotification 
                                              object:nil];
}

- (void)HTTPOperationDidFinish:(NSNotification *)notification 
{
   AFHTTPRequestOperation *operation = (AFHTTPRequestOperation *)[notification object];
   if (![operation isKindOfClass:[AFHTTPRequestOperation class]]) {
       return;
   }
   if (operation.error) {
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection error"
                                                       message:@"Missing connection to the internet"
                                                      delegate:nil
                                             cancelButtonTitle:@"OK"
                                             otherButtonTitles:nil];

       [alert show];
   }
}