Question

Dans mon App, quand un certain bouton est pressé, j'appelle une méthode (postButtonClicked:) qui parse un service Web sur un thread séparé. J'affiche alors l'utilisateur un UIAlertView pour les informer si l'appel a réussi ou non.

est le code que j'utilise ici:

- (void)postButtonClicked:(id)sender {
    [NSThread detachNewThreadSelector:@selector(postViaWebservices) toTarget:self withObject:nil];
}

- (void)postViaWebservices {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    WebServiceManager *wsm = [[WebServiceManager alloc] init];

    BOOL success = [wsm callPost];

    if (success) {
        [self performSelectorOnMainThread:@selector(postSuccess) withObject:nil waitUntilDone:NO];
    } else {
        [self performSelectorOnMainThread:@selector(postFailure) withObject:nil waitUntilDone:NO];
    }   

    [wsm release];

    [pool release];

}

- (void)postSuccess {

    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:nil
                          message:@"Success message"
                          delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];

    [alert show];
    [alert release];

}

- (void)postFailure {

    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:nil
                          message:@"Failure message"
                          delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];

    [alert show];
    [alert release];

}

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

    ...

}

Tout cela a bien fonctionné jusqu'à ce que j'ajouté le alertView:clickedButtonAtIndex: au contrôleur de vue (nécessaire pour une autre UIAlertView I affichage). Maintenant, chaque fois que j'appelle postButtonClicked:, la plante App. Cependant, si je retire alertView:clickedButtonAtIndex:, puis appelez postButtonClicked:, l'application fonctionne bien.

Je ne sais pas ce que je dois faire pour résoudre ce problème.

Était-ce utile?

La solution

Peu importe si oui ou non le contenu de la méthode délégué vue d'alerte est pertinente pour la réussite / échec des messages, il pourrait encore être un problème, donc nous montre le contenu de cette méthode peut être la seule façon de vous obtenir une réponse . De toute façon, la méthode déléguée vue alerte est appelée lorsque vous appuyez sur OK sur le succès / échec des messages, parce que vous configurez le délégué des alertes comme self. Si vous ne voulez pas la méthode d'invoquer pour rejeter le succès / échec des alertes, ne définissez pas le délégué.

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