Сценарий AFNetworking и No Internet Connection
Я использую AFNetworking
в своем приложении для каждого запроса (например, для входа в систему, получения данных из URL-адреса и т.д.).
Возьмите это, например: пользователь нажимает кнопку входа в систему, и там нет соединения, как мгновенно отображать UIAlertView
, который говорит об ошибке? Способ только состоит в том, чтобы подождать таймаут запроса и выполнить блок failure
? Разве нет способа мгновенно проверить, есть ли соединение или нет?
Спасибо!
Ответы
Ответ 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];
}
}
Ответ 5
Как использовать Достижимость?
Вы можете проверить, есть ли у вас правдоподобная причина для попытки подключения до того, как вы это сделаете.
Похоже, Пример проекта Apple для достижимости показывает, как получить начальный статус.