2013-06-07 5 views
0

Je télécharge une image sur un serveur. J'utilise un UIAlertView, AlertView1, qui demande à l'utilisateur s'il veut télécharger l'image. Si oui, une seconde alerte, AlertView2, s'affichera avec une barre de progression et disparaîtra une fois le téléchargement terminé. Donc, une fois que l'utilisateur clique sur Oui dans AlertView1, j'appelle afficher AlertView2 et appelle la méthode [self uploadPhoto]. Le problème vient donc du fait qu'avant même que AlertView2 ait le temps d'apparaître, le chargement intensif de CPU est en cours d'exécution et retarde l'affichage d'AlertView2 pendant plusieurs secondes. Il semble que l'AlertView2 montre finalement un chemin à travers le processus de téléchargement. Comment démarrer le processus de téléchargement seulement une fois que AlertView2 a été affiché?Effectuer une action après l'affichage de UIAlertView?

Voici le code

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
     //Detectss AlertView1's buttonClick 
     [self.alertView2 show]; 
} 
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 

    //Launches when AlertView1 is dismissed 
    [self UploadPhoto] 
} 

-(void)uploadPhoto 
{ 
    //CPU/Network Intensive Code to Upload a photo to a server. 
} 

Répondre

3

Définir vos contrôleur en tant que délégué de la deuxième vue d'alerte et de télécharger la photo lorsque vous recevez le didPresentAlertView: message de votre deuxième alerte.

+0

merci! c'était stupide de ne pas regarder les méthodes des délégués. X_X Je viens de me fier aux popups xcode de '- (void) alertView ...' – Alan

0

Appelez votre méthode [self uploadPhoto] après avoir appelé [self.alertView2 show] avec une minuterie à l'aide -

[self performSelector:@selector(uploadPhoto) withObject:nil afterDelay:0.3]; 

Il appellera votre méthode après une interruption de 3 secondes après votre alerte apparaît.

0

Utilisez le multithreading pour envoyer uploadPhoto à un autre thread. De cette façon, vous ne bloquerez pas le thread principal tout en effectuant des opérations réseau coûteuses.

dispatch_queue_t queue = dispatch_queue_create("upload queue", NULL); 
dispatch_async(queue, ^{ 
    [self uploadPhoto]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     //dismiss alertview2 here 
    }); 
}); 
Questions connexes