iPhone SDK - (void) viewDidLoad {} - Afficher la progression
-
20-09-2019 - |
Question
J'ai une fonction à long - (void)viewDidLoad { }
qui utilise Internet pour charger une page, et chaque fois que l'application charge l'URL, l'écran est noir. J'ai une configuration de UIActivityIndicator
pour montrer que l'adresse chargement, mais je ne sais pas comment l'empêcher de paraître comme si l'application ne répond pas, et je ne veux pas montrer l'indicateur d'activité réseau [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
car l'écran toujours noir, juste avec un chargeur dans le coin supérieur. Mon code est ci-dessous:
- (void)viewDidLoad {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
email.text = [defaults objectForKey:@"mom_email"];
pass.text = [defaults objectForKey:@"mom_pass"];
if (email.text != nil && pass.text != nil) {
[self login:loginBtn];
}
}
- (IBAction)login:(id)sender {
[email resignFirstResponder];
[pass resignFirstResponder];
[loader startAnimating]; // Does nothing though
NSString *em = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)email.text,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
NSString *ps = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)pass.text,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
NSURL *url = [[NSURL alloc] initWithScheme:@"http" host:@"localhost" path:[[NSString alloc] initWithFormat:@"/app/login.php?email=%@&pass=%@", em, ps]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *loginResult = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
[loader stopAnimating];
NSRange range = [loginResult rangeOfString:@"1"];
if (range.location != NSNotFound) {
[self dismissModalViewControllerAnimated:YES]; // Doesn't do anything if function called from viewDidLoad
}
}
Pas de solution correcte
Autres conseils
Au lieu de bloquer dans le viewDidLoad, essayez de démarrer un nouveau thread qui fait le chargement. Ensuite, vous init juste la vue avec le texte qui dit les choses de chargement et de mise à jour quel que soit le contenu est nécessaire une fois qu'il est disponible.
Vous pouvez peut-être ajouter un texte disant quelque chose chargement. Ou vous pouvez aussi jouer avec les méthodes de délégué de NSURLConnection pour fournir une barre de progression au lieu d'un indicateur de progression.