我在我的应用中为每个请求使用AFNetworking
(例如登录,从网址获取数据等)。
以此为例:用户单击登录按钮并且没有连接,如何立即显示出错误的UIAlertView
? only 方式是等待请求超时并执行failure
块?有没有办法立即检查是否有连接?
谢谢!
答案 0 :(得分:57)
从0.9开始,AFHTTPClient
实际上内置了网络可达性(与Apple上述Reachability代码的简单接口)。只需包含SystemConfiguration
框架并使用-setReachabilityStatusChangeBlock:
指定可达性状态更改时的响应。
答案 1 :(得分:28)
使用AFNetworking
这些是在添加AFNetworing类后利用setReachabilityStatusChangeBlock:
必须遵循的步骤 -
SystemConfiguration.framework
添加到您的项目#import <SystemConfiguration/SystemConfiguration.h>
AFHTTPClient
的子类,请在init函数中添加以下代码行 - [self setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"changed %d", status); //your code here }];
答案 2 :(得分:2)
也许您可以使用“Reachability”来确定设备是否已连接到网络。 这是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
}
答案 3 :(得分:2)
我使用 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];
}
}
答案 4 :(得分:0)