这次我有一个简单的问题(希望如此)。我有一个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
)来类似地更新我的状态标签和进度条,因为我去。
有什么想法吗?
答案 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
});
}
});