我有一个名为“刷新数据”的UIBarButtonItem。当用户点击它时,应用程序应刷新其数据。点击该按钮时发生的事情是启动Web服务并引入xml数据,它们的订单为30000-40000条记录。所以为了防止UI挂起,我写了一个后台线程,并在那里加载。UIAlertview挂在后台线程正在加载数据
- (void)refreshDataAction
{
NSLog(@"Refresh Data");
//Put up an alert box indicating user to wait while data is loading.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Data is Loading"
message:@"Please wait while data is being refreshed."
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
alert.tag = 10;
[alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"hit in clickedbuttonatindex alertview at 259");
self.refreshActIndicator.hidden = NO;
[self.refreshActIndicator startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
[self getAllCustomerValues];
NSError *nwerror = nil;
if (![self.secondMOC save:&nwerror])
{
NSLog(@"209 Failed to save second MOC");
}
else
{
//NSLog(@"saved success");
}
});
}
就像你可以看到警报视图显示。我点击确定,该框仍然存在“变黑”,并挂在屏幕上。然后7-8秒后,该框消失,动画开始动画指示器。我的目标是得到这样的东西。 1.用户点击刷新数据按钮。 2.出现警告视图。 3.用户单击确定。 4.警告框消失,立即后台线程开始工作,我看到活动指示器工作/动画。
用户将知道在活动指示器动画时等待。那么,如何在用户点击“确定”后立即启动应用程序,并立即开始动画制作,并且alertview确定不会变黑。我清楚了吗?如果您需要更多信息,请询问。谢谢
编辑:这个屏幕有一个后台线程在它加载第一次当天的工作。这之前有一个屏幕。在它上面,我继续按钮,然后单击它,启动后台线程,这个线程完全相同,就像这个在这里一样。我不杀它或任何东西。
编辑2:
- (void)refreshDataAction
{
NSLog(@"Refresh Data");
self.txtCustomerSearch.text [email protected]"";
[self cleanUPPreviousLabels];
//Put up an alert box indicating user to wait while data is loading.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Data is Loading"
message:@"Please wait while data is being refreshed."
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
//alert.tag = 10;
//[alert show];
[alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:FALSE];
NSLog(@"hit in willpresenet alertview at 221");
self.refreshActIndicator.hidden = NO;
[self.refreshActIndicator startAnimating];
NSLog(@"Dispatching");
//Disable the view and all the other controls
self.txtCustomerSearch.userInteractionEnabled =NO;
self.txtCustomerSearch.enabled =NO;
self.btnSearch.enabled =NO;
self.btnSearch.userInteractionEnabled = NO;
self.scrollView.userInteractionEnabled = NO;
//self.view.userInteractionEnabled =NO;
self.chkButton.enabled = NO;
[self deletePreviousValues];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
NSLog(@"Getting customer values");
[self getAllCustomerValues];
NSLog(@"Got customer values");
NSError *nwerror = nil;
if (![self.secondMOC save:&nwerror])
{
NSLog(@"209 Failed to save second MOC");
}
else
{
//NSLog(@"saved success");
}
self.txtCustomerSearch.userInteractionEnabled = YES;
self.txtCustomerSearch.enabled =YES;
self.btnSearch.enabled =YES;
self.btnSearch.userInteractionEnabled = YES;
self.scrollView.userInteractionEnabled = YES;
self.view.userInteractionEnabled =YES;
self.chkButton.enabled = YES;
[self.refreshActIndicator stopAnimating];
NSLog(@"Saved");
});
NSLog(@"Dispatched");
}
getAllCustomerValues方法是否同步? – 2013-02-21 19:37:07
@GeorgeSachin。我如何知道? – RookieAppler 2013-02-21 19:41:06
@GeorgeSachin - 由于它在异步队列上执行,它将异步运行。 – rmaddy 2013-02-21 19:41:52