有没有一种简单的方法来代码运行时更新进度条

时间:2012-11-29 03:09:08

标签: objective-c for-loop nstextfield nsprogressindicator

  

可能重复:
  NSProgressIndicator progress with For loops?

这次我有一个简单的问题(希望如此)。我有一个NSProgressIndicatorView(进度条),我想更新它的值和状态标签作为for循环运行:

for(int i=0; i<[nameArr count]; i++)
{
    NSString* str = [nameArr objectAtIndex:i];
    [text setStringValue:str];
    [status setStringValue:[NSString stringWithFormat:@"Processing names...%d of %ld",(i+1),[nameArr count]]];
    [progress setDoubleValue:i];
}

此代码有效,但状态标签和进度条在整个for循环完成之前不会更新。如果我将它们作为NSLog发送,我可以看到它运行起来,所以我认为应该有一个简单的方法(不创建NSOperation)来类似地更新我的状态标签和进度条,因为我去。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在进行一些挖掘之后,可以使用以下代码通过for循环异步更新UI:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
    for(int i=0; i<max; i++)
    {
        //Run for loop stuff here

        dispatch_async(dispatch_get_main_queue(), ^(void) {
           //Run UI updates in here 
        });
    }
});