从后台服务更新UIlabel文本

时间:2014-09-09 06:54:20

标签: ios objective-c iphone xcode uilabel

我有一种在后台方法调用中工作的方法。

在.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中。

任何帮助吗?

4 个答案:

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