問題很簡單:我的應用程序控制是否每次啓動時都有更新。如果有更新,彈出窗口將顯示「是」或「否」選擇。當用戶點擊是4種方法啓動。這些方法下載xml文件並上傳CoreData。這是警報的代碼:iOS - 後臺進程和UI更新
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex==1) {
[self showActivityViewer];
[self downloadControlAndUpdatePoi];
[self downloadControlAndUpdateItinerari];
[self downloadControlAndUpdateArtisti];
[self downloadControlAndUpdateEventi];
[self hideActivityViewer];
NSLog(@"AGGIORNA");
} else {
NSLog(@"NON AGGIORNARE");
return;
}
}
但有一個問題:當用戶水龍頭是警告不會消失,並保留在屏幕上,直到所有的方法完成。所以我試試這個其他代碼:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex==1) {
[self showActivityViewer];
[NSThread detachNewThreadSelector:@selector(startDownloads) toTarget:self withObject:nil];
[self hideActivityViewer];
NSLog(@"AGGIORNA");
} else {
NSLog(@"NON AGGIORNARE");
return;
}
}
-(void)startDownloads {
NSInvocationOperation *opPoi=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadControlAndUpdatePoi) object:nil];
NSInvocationOperation *opItinerari=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadControlAndUpdateItinerari) object:nil];
NSInvocationOperation *opArtisti=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadControlAndUpdateArtisti) object:nil];
NSInvocationOperation *opEventi=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadControlAndUpdateEventi) object:nil];
NSArray *operations=[[NSArray alloc] initWithObjects:opPoi,opItinerari,opArtisti,opEventi, nil];
NSOperationQueue *queue=[[NSOperationQueue alloc] init];
[queue addOperations:operations waitUntilFinished:YES];
[queue waitUntilAllOperationsAreFinished];
}
甚至在這裏還有一個問題:我點擊開始,但活動查看器沒有出現。警報消失,線程開始並運行4種方法。
我需要在後臺運行的進程,就像我的第二代碼發生,但我需要我的showActityViewer方法將運行並顯示微調。
謝謝:)
但我該如何調用startDownloads?在用戶點擊「是」之後,是否有NSThread分離或[自啓動下載]? –
對不起,用detachThread;你正確地做到了這一點。唯一的一點是,在startDownloads中,你不需要更多的異步操作,它們可以是順序的。 – sergio
似乎它是一切都好,但一個問題,大問題發生了:我的downloadAndControl *方法與CoreData一起工作,並與此解決方案我有一個NSInternalInconsistencyException與CoreData的方法保存。 –