我正在将图片上传到服务器。我正在使用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.
}
答案 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
});
});