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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top