UIAlertView显示后执行操作?

时间:2013-06-07 19:14:00

标签: ios objective-c uialertview

我正在将图片上传到服务器。我正在使用UIAlertView,AlertView1,询问用户是否要上传图片。如果是,则为第二个警报视图,AlertView2将显示进度条,并在上传完成后消失。

因此,一旦用户在AlertView1中点击“是”,我就会调用show AlertView2并调用方法[self uploadPhoto]。所以问题就出现了,即使在AlertView2有时间显示之前,CPU密集型uploadPhoto正在运行,它会延迟AlertView2显示几秒钟。似乎AlertView2最终显示了上传过程的一些方法。

如何在AlertView2显示后启动上传过程?

这是代码

- (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.
}

3 个答案:

答案 0 :(得分:3)

将您的控制器设置为第二个警报视图的代理,并在您从第二个警报收到didPresentAlertView:消息时上传照片。

答案 1 :(得分:0)

使用 -

使用计时器调用[self uploadPhoto]后调用您的方法[self.alertView2 show]
[self performSelector:@selector(uploadPhoto) withObject:nil afterDelay:0.3];

警报出现后,它将在3秒间隔后调用您的方法。

答案 2 :(得分:0)

使用多线程将uploadPhoto分派给另一个线程。这样,在执行昂贵的网络操作时,您不会阻止主线程。

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