我使用流行的类calle SSZipArchive来解压缩文件,具体来说就是这个方法:
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination progressHandler:(void (^)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler completionHandler:(void (^)(NSString *path, BOOL succeeded, NSError *error))completionHandler
我正在更新内部块中的两个uilabels文本,这两个文本都已分配,之前两个文本都已更改,当我打印uilabels的内容时,文本已更新但屏幕没有&#39 ; t更新它,我不得不说当我完成zip下载到委托方法时加载了这个方法。
我的代码:
- (void)downloadManager:(id)sender finishedDownload:(ANDownload *)download {
if ( [[NSFileManager defaultManager] fileExistsAtPath:download.storeFile] ) {
NSLog(@"Download exists");
[self.labelStep setText:CustomLocalizedString(@"ZIP_DECOMPRESSING_MSG", nil)];
[SSZipArchive unzipFileAtPath:download.storeFile toDestination:self.saveFolderPath progressHandler:^(NSString *entry, unz_file_info zipInfo, long entryNumber, long total) {
//Your main thread code goes in here
NSString * labelProgressText = [NSString stringWithFormat:@"%ld / %ld", entryNumber, total];
self.labelProgress.text = labelProgressText;
} completionHandler:^(NSString *path, BOOL succeeded, NSError *error) {
NSLog(@"Succeeded %d in path: %@", succeeded, path);
if(succeeded){
.....
答案 0 :(得分:1)
你可能不在主线上,你可以试试这个:
dispatch_async(dispatch_get_main_queue(), ^{
//Your main thread code goes in here
yourLabel.text = @"new text";
});
修改强>
由于您位于主线程上,并且您想立即更新标签,因此您需要:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
//Your main thread code goes in here
yourLabel.text = @"new text";
});
}
但是,我不明白为什么在你的例子中你的方法结束时没有更新它。可能有更好的解决方案。