我已经实施AFNetworking
而没有继承AFHTTPClient
,部分使用我DownloadQueueManager
中的以下代码:
-(void)downloadPodcastAt:(NSString *)url toPath:(NSString *)path
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:60.0];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{
[self saveQueuedItemInformation];
} failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
// Other stuff
}];
[operation start];
}
我的问题很多。我用google搜索“我的手指麻木了,还没有找到一个合适的代码示例,可以使用AFNetworking
简单轻松地检查可达性状态。 (奇怪的是,有很多关于导入SystemConfiguration.framework
的讨论,这看起来很简单。因此,如果我的用户想要最小化他们的数据使用,并且只使用wifi下载,我该如何检查wifi,并且只有在wifi可用时才下载?
其次,似乎AFNetworking
希望成为一个用户友好的前端。但我实际上可以在这个前端使用前端,因为那里有很多东西,人们不得不通过它来获得所需的东西。我只需要访问一个url,下载一个xml文件(基于可达性),并用它做一些事情。我错过了一些让这项任务变得简单的事情吗?
当我理解这一点时,我完全建立了一个前端或五个来简化实现(假设我不仅仅是一个白痴)。提前感谢任何回复。
答案 0 :(得分:44)
实际上与A-Live said可达性是AFNetworking的一部分相反。它已在AFHTTPClient.h
here中实施。您需要在.pch
文件中按照here所述进行正确的导入才能使用它。
要使用它,您可能希望拥有AFHTTPClient
的子类,以便使用setReachabilityStatusChangeBlock
定义的here。这是一个不使用子类的简单示例。
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://google.com"]];
[client setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if (status == AFNetworkReachabilityStatusNotReachable) {
// Not reachable
} else {
// Reachable
}
if (status == AFNetworkReachabilityStatusReachableViaWiFi) {
// On wifi
}
}];
如果您不喜欢此可访问性设置的工作原理,那么我建议使用Apple的可访问性Tony Million's fork。简单的例子:
Reachability *reach = [Reachability reachabilityWithHostname:@"google.com"];
if ([reach isReachable]) {
// Reachable
if ([reach isReachableViaWiFi]) {
// On WiFi
}
} else {
// Isn't reachable
[reach setReachableBlock:^(Reachability *reachblock)
{
// Now reachable
}];
[reach setUnreachableBlock:^(Reachability*reach)
{
// Now unreachable
}];
}
答案 1 :(得分:20)
使用AFNetworking
2.0及更高版本,可以检查这样的可用性,
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
case AFNetworkReachabilityStatusReachableViaWWAN:
case AFNetworkReachabilityStatusReachableViaWiFi:
//available
break;
case AFNetworkReachabilityStatusNotReachable:
//not available
break;
default:
break;
}
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];
//start monitoring
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
获取当前状态
[AFNetworkReachabilityManager sharedManager].reachable
答案 2 :(得分:8)
只是更新,AFNetworking的新版本已弃用AFHTTPClient。
您可以使用AFHTTPRequestOperationManager.h代替
github页面本身的一些小东西:
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url]; //url can be google.com or something you want to reach
NSOperationQueue *operationQueue = manager.operationQueue;
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)
{
switch (status)
{
case AFNetworkReachabilityStatusReachableViaWWAN:
case AFNetworkReachabilityStatusReachableViaWiFi:
{
NSLog(@"SO REACHABLE");
[operationQueue setSuspended:NO]; // or do whatever you want
break;
}
case AFNetworkReachabilityStatusNotReachable:
default:
{
NSLog(@"SO UNREACHABLE");
[operationQueue setSuspended:YES];
//not reachable,inform user perhaps
break;
}
}
}];
[manager.reachabilityManager startMonitoring];