【发布时间】:2013-04-03 12:09:32
【问题描述】:
我在显示较长主线程操作的进度时遇到了一些问题(需要在主线程中)。
通过按下按钮调用动作。
-(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 秒,具体取决于设备。
任何想法我哪里出错了?
// 编辑:带有背景线程的新版本:
[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 调用出现死锁。
【问题讨论】:
标签: ios objective-c uibutton ibaction uiprogressview