我有一個名爲「刷新數據」的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