我有一种在后台方法调用中工作的方法。
在.h文件中:
@property (retain,nonatomic ) IBOutlet UILabel *progressLabel;
在.m文件中:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// update UI on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
[self updateProgressView];
});
});
}
并且在updateProgressView
中就像:
-(void)updateProgressView{
NSString *TxtProgress = [NSString stringWithFormat:@"Processing %d/%d contacts", self.processedContactNum, self.totalContactNum];
NSLog(@"%@",TxtProgress);
[self.progressLabel setText:[NSString stringWithFormat:@"%@",TxtProgress]];
}
我正在获取Nslog值,但它没有显示在UI中。
任何帮助吗?
答案 0 :(得分:1)
您可以尝试以下代码段随时更新您的用户界面。它适用于MAIN Thread并用于更新UI。
dispatch_sync(dispatch_get_main_queue(), ^{
[self.progressLabel setText:[NSString stringWithFormat:@"%@",TxtProgress]];
});
快乐编码:)
答案 1 :(得分:0)
首先代替
[self.progressLabel setText:[NSString stringWithFormat:@"%@",TxtProgress]];
您可以使用
[self.progressLabel setText:TxtProgress];
请检查您的IBOutlet是否已附加到Xib文件中的UILabel。
否则一切都很好,它应该有用。
答案 2 :(得分:0)
我强行添加了一个Nstimer来控制时间过程:
只需添加它:
[NSThread sleepForTimeInterval:0.01];
多数民众赞成。谢谢大家.. :)
答案 3 :(得分:-1)
您可以尝试以下代码
[self performSelectorOnMainThread:@selector(updateProgressView) withObject:nil waitUntilDone:YES];
//instead of
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// update UI on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
[self updateProgressView];
});
});