Domanda

Ho una funzione - (void)viewDidLoad { } lunga che utilizza Internet per caricare una pagina, e ogni volta che l'applicazione carica l'URL, lo schermo è nero. Ho una configurazione UIActivityIndicator per dimostrare che l'indirizzo sta caricando, ma io non so come evitare che sembrava come se l'applicazione non risponde, e io non voglio mostrare l'indicatore [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; attività di rete, perché lo schermo essere ancora neri, solo con un caricatore nell'angolo in alto. Il mio codice è qui sotto:

- (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
    }
}

Nessuna soluzione corretta

Altri suggerimenti

Invece di bloccare nella viewDidLoad, provare ad avviare un nuovo filo che fa il carico. Poi basta init la vista con testo che dice le cose stanno caricando e aggiornare ciò che è necessario il contenuto una volta che è disponibile.

È possibile magari aggiungere un testo che dice qualcosa sta caricando. Oppure si può anche giocare con i metodi NSURLConnection delegato di fornire una barra di avanzamento invece di un indicatore di avanzamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top