Depuis NetworkActivityIndicatorVisible
peut être réglé à partir de plusieurs points alors qu'une connexion est toujours active, vous devez suivre le nombre d'appels qui l'activent/désactivent. Les éléments suivants UIApplication
utilise une variable statique pour ce faire :
// file UIApplication+NetworkActivity.h
@interface UIApplication (NetworkActivity)
- (void)showNetworkActivityIndicator;
- (void)hideNetworkActivityIndicator;
@end
// file UIApplication+NetworkActivity.m
#import "UIApplication+NetworkActivity.h"
static NSInteger activityCount = 0;
@implementation UIApplication (NetworkActivity)
- (void)showNetworkActivityIndicator {
if ([[UIApplication sharedApplication] isStatusBarHidden]) return;
@synchronized ([UIApplication sharedApplication]) {
if (activityCount == 0) {
[self setNetworkActivityIndicatorVisible:YES];
}
activityCount++;
}
}
- (void)hideNetworkActivityIndicator {
if ([[UIApplication sharedApplication] isStatusBarHidden]) return;
@synchronized ([UIApplication sharedApplication]) {
activityCount--;
if (activityCount <= 0) {
[self setNetworkActivityIndicatorVisible:NO];
activityCount=0;
}
}
}
@end
Importer maintenant UIApplication+NetworkActivity.h
dans votre code client et appeler
// on connection started:
[[UIApplication sharedApplication] showNetworkActivityIndicator];
// on connection finished:
[[UIApplication sharedApplication] hideNetworkActivityIndicator];
Si votre préoccupation est que l'indicateur ne clignote que pendant une seconde, vous n'avez pas besoin d'un processus en arrière-plan. Il suffit d'appeler [self performSelector:@selector(loadSources) withObject:Nil afterDelay:0.1]
afin que le thread de l'interface utilisateur ait le temps de lancer l'animation de l'indicateur de réseau avant de bloquer le thread principal.