问题很简单:我的应用程序控制是否每次启动时都有更新。如果有更新,弹出窗口将显示“是”或“否”选择。当用户点击是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的方法保存。 –