Frage

In meiner App, wenn eine bestimmte Taste gedrückt wird, nenne ich eine Methode (postButtonClicked:), die einen Web-Dienst auf einem separaten Thread analysiert. Ich zeige dann den Benutzer eine UIAlertView um sie zu informieren, ob der Anruf erfolgreich war oder nicht.

Hier ist der Code, den ich verwenden:

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

    ...

}

Das alles hat gut funktioniert, bis ich die alertView:clickedButtonAtIndex: zu View-Controller (erforderlich für eine andere UIAlertView I Anzeige) hinzugefügt. Nun, jedes Mal wenn ich postButtonClicked: nennen, stürzt die App. Wenn ich jedoch alertView:clickedButtonAtIndex: entfernen, dann postButtonClicked: rufen, die App funktioniert OK.

Ich bin mir nicht sicher, was ich tun müssen, um dieses Problem zu beheben.

War es hilfreich?

Lösung

Unabhängig davon, ob der Inhalt der Warnungsansicht Delegatmethode ist relevant für den Erfolg / Fail-Meldungen, könnte es noch ein Problem sein, so uns den Inhalt dieses Verfahrens zeigte die einzige Möglichkeit sein, das Ihnen eine Antwort zu bekommen . So oder so wird die Alarmansicht Delegatmethode aufgerufen, wenn Sie auf OK auf dem Erfolg tippen / Meldungen fehlschlagen, da Sie die Warnungen als self delegieren sind einstellen. Wenn Sie nicht die Methode wollen aufzurufen, wenn der Erfolg Abweisung / Fail-Benachrichtigung, nicht die Delegierten festgelegt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top