UIAlertView /线程问题

时间:2010-02-09 11:46:53

标签: iphone multithreading uialertview

在我的应用程序中,当按下某个按钮时,我调用一个方法(postButtonClicked:),该方法在一个单独的线程上解析Web服务。然后,我向用户显示UIAlertView以通知他们呼叫是否成功。

以下是我使用的代码:

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

    ...

}

这一切都很好UNTIL我将alertView:clickedButtonAtIndex:添加到视图控制器(我显示的另一个UIAlertView所需)。现在,每次拨打postButtonClicked:时,应用程序都会崩溃。但是,如果我删除alertView:clickedButtonAtIndex:,然后拨打postButtonClicked:,该应用就可以了。

我不确定我需要做些什么来解决这个问题。

1 个答案:

答案 0 :(得分:0)

无论警报视图委托方法的内容是否与成功/失败消息相关,它仍然可能是一个问题,因此向我们显示该方法的内容可能是获得答案的唯一方法。无论哪种方式,当您在成功/失败消息上点击“确定”时都会调用警报视图委托方法,因为您将警报委托设置为self。如果您不希望在解除成功/失败警报时调用该方法,请不要设置该委托。