Domanda

Nel mio app, quando si preme un determinato tasto, che io chiamo un metodo (postButtonClicked:) che analizza un servizio Web su un thread separato. Ho quindi visualizzare all'utente un UIAlertView per informarli se la chiamata ha avuto successo o meno.

Ecco il codice che uso:

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

    ...

}

Il tutto ha funzionato benissimo fino ho aggiunto il alertView:clickedButtonAtIndex: al controller della vista (necessario per un altro UIAlertView I display). Ora, ogni volta che io chiamo postButtonClicked:, l'App si blocca. Tuttavia, se tolgo alertView:clickedButtonAtIndex:, quindi chiamare postButtonClicked:, l'App funziona bene.

Non sono sicuro di che cosa devo fare per risolvere questo problema.

È stato utile?

Soluzione

A prescindere dal fatto che il contenuto del metodo di visualizzazione delegato avviso è rilevante per il successo / fail messaggi, potrebbe ancora essere un problema, mostrando così ci il contenuto di tale metodo può essere l'unico modo per ottenere una risposta . In entrambi i casi, il metodo di visualizzazione delegato avviso viene chiamata quando si tocca OK sul successo / fail messaggi, perché si sta impostando il delegato avvisi come self. Se non si desidera che il metodo da richiamare quando respinge il successo / fail avvisi, non impostare il delegato.

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