UILabel重新加载文本

时间:2015-07-24 08:22:13

标签: ios objective-c uilabel block ssziparchive

我使用流行的类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){
         .....

1 个答案:

答案 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";       
    });
}

但是,我不明白为什么在你的例子中你的方法结束时没有更新它。可能有更好的解决方案。