我有一个while
循环,运行了很多秒,这就是为什么我想在该过程中更新进度条(NSProgressIndicator),但它只在循环完成后更新一次.顺便说一下,如果我想要更新标签文本,也会发生同样的情况.
我相信,我的循环会阻止该应用程序的其他事情发生.必须有另一种技术.这与线程有什么关系吗?我是在正确的轨道上吗?有人可以给我一个简单的例子,如何"优化"我的应用程序?
我的应用程序是一个Cocoa应用程序(Xcode 3.2.1),我的这两种方法Example_AppDelegate.m
:
// This method runs when a start button is clicked. - (IBAction)startIt:(id)sender { [progressbar setDoubleValue:0.0]; [progressbar startAnimation:sender]; running = YES; // this is a instance variable int i = 0; while (running) { if (i++ >= processAmount) { // processAmount is something like 1000000 running = NO; continue; } // Update progress bar double progr = (double)i / (double)processAmount; NSLog(@"progr: %f", progr); // Logs values between 0.0 and 1.0 [progressbar setDoubleValue:progr]; [progressbar …
我想用线程更新进度条,如此处所述.我正在努力实现这个结果:
这是我的代码:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
progressBar.hidden = NO;
for (NSInteger i = 1; i <= progressBar.maxValue; i += 20){
[NSThread sleepForTimeInterval:1.0];
dispatch_async(dispatch_get_main_queue(), ^{
[progressBar setDoubleValue:(double)i];
[progressBar displayIfNeeded];
});
}
progressBar.hidden = YES;
});
Run Code Online (Sandbox Code Playgroud)
进度条在我的ViewController.h中以这种方式定义:
NSProgressIndicator *progressBar
问题是在循环结束时没有删除条形,我不知道是否以progressBar.hidden = YES;
这种方式工作.
有人能帮我吗?代码片段非常有用,特别是如果后面有解释的话.