我在显示较长的主线程操作的进度时遇到了一些麻烦(需要在主线程中)。
通过按下按钮调用该操作。
-(void)getCSVExport:(id)sender{
...
NSString *filePath = [path stringByAppendingPathComponent:fileName];
NSData *csvData = [NSData dataWithContentsOfFile:filePath];
if (nil == csvData) {
_progressView.hidden = NO;
[self.view bringSubviewToFront:_progressView];
_progressView.progress = 0;
csvData = [self generateCSVExportForMonth:_monthToExportInt];
[csvData writeToFile:filePath atomically:YES];
_progressView.hidden = YES;
}
...
}
在功能内,generateCSVExportForMonth:
我正在更新进度_progressView.progress = newValue
。
我现在有两个问题:
1)当按下呼叫按钮时,getCSVExport:
该按钮保持突出显示,直到呼叫完成。2)progressView 永远不会出现,更不用说更新自己了。
信息:通话需要 0.5 到 2 秒,具体取决于设备。
有什么想法我哪里出错了吗?
// 编辑:带有 backgroundThread 的新版本:
[self.view bringSubviewToFront:_progressView];
_progressView.progress = 0;
[self performSelector:@selector(assignCSVData:) onThread:[NSThread new] withObject:csvData waitUntilDone:YES];
_progressView.hidden = YES;
和时间昂贵的电话:
-(void)assignCSVData:(NSData*)data{
data = [self generateCSVExportForMonth:_monthToExportInt];
}
这会导致performSelector
调用时出现死锁。