J'ai implémenté AFNetworking
sans sous-classer AFHTTPClient
, en utilisant en partie le code suivant dans mon 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];
}
Ma question est multiple. J'ai googlé jusqu'à ce que mes doigts soient engourdis et je n'ai pas encore trouvé d'échantillon de code décent qui vérifie simplement et facilement l'état de l'accessibilité à l'aide de AFNetworking
. (Curieusement, il y a beaucoup de discussions sur l'importation de SystemConfiguration.framework
, ce qui semble être une évidence). Donc, si mon utilisateur souhaite minimiser son utilisation des données et ne télécharger qu'en utilisant le wifi, comment puis-je vérifier le wifi et télécharger uniquement si le wifi est disponible?
Deuxièmement, il semble que AFNetworking
veuille être un frontal convivial. Mais je pourrais en fait utiliser un front-end à ce front-end, car il y a BEAUCOUP de choses là-dedans que l'on doit parcourir pour arriver à ce dont on a besoin. J'ai juste besoin d'accéder à une URL, de télécharger un fichier xml (basé sur l'accessibilité) et de faire des choses avec. Suis-je en train de manquer quelque chose qui en fait une tâche simple?
Quand je comprends cela, je construis totalement un front-end ou cinq pour simplifier la mise en œuvre (en supposant que je ne suis pas seulement un idiot). Merci d'avance pour toutes les réponses.
En fait contrairement à ce que A-Live a dit Accessibilité IS une partie de AFNetworking. Il est implémenté dans AFHTTPClient.h
ici . Vous avez besoin des importations correctes dans votre .pch
fichier tel que discuté ici afin de l'utiliser.
Pour l'utiliser, vous voudrez probablement avoir une sous-classe de AFHTTPClient
afin que vous puissiez utiliser setReachabilityStatusChangeBlock
défini ici . Voici un exemple simple sans utiliser de sous-classe.
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
}
}];
Si vous n'aimez pas le fonctionnement de cette configuration d'accessibilité, je recommanderais la fourchette de Tony Million de l'accessibilité d'Apple. Exemple simple:
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
}];
}
Avec AFNetworking
2.0 et supérieur, on peut vérifier la disponibilité comme ceci,
[[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];
Pour obtenir l'état actuel
[AFNetworkReachabilityManager sharedManager].reachable
Juste une mise à jour, la nouvelle version d'AFNetworking a déprécié AFHTTPClient.
Vous pouvez utiliser AFHTTPRequestOperationManager.h à la place
Quelque chose de petit tiré de la page github elle-même:
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];