2010-03-18 25 views
0

J'ai une longue - (void)viewDidLoad { } fonction qui utilise Internet pour charger une page, et chaque fois que l'application charge l'URL, l'écran est noir. J'ai une configuration UIActivityIndicator pour montrer que l'adresse est en cours de chargement, mais je ne sais pas comment l'empêcher de sembler si l'application ne répond pas, et je ne veux pas montrer l'indicateur d'activité réseau [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; parce que l'écran toujours être noir, juste avec un chargeur dans le coin supérieur. Mon code est ci-dessous:iPhone SDK - (void) viewDidLoad {} - Afficher les progrès

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

Répondre

0

Vous pouvez peut-être ajouter un texte indiquant que quelque chose se charge. Vous pouvez également utiliser les méthodes de délégué NSURLConnection pour fournir une barre de progression au lieu d'un indicateur de progression.

1

Au lieu de bloquer dans viewDidLoad, essayez de démarrer un nouveau thread qui effectue le chargement. Ensuite, il vous suffit d'initier la vue avec du texte qui indique que les choses se chargent et mettent à jour le contenu nécessaire une fois qu'il est disponible.