相关疑难解决方法(0)

如何在长时间运行的循环中更新Cocoa中的进度条?

我有一个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 …

macos cocoa objective-c

5
推荐指数
1
解决办法
2万
查看次数

Objective C - 循环后删除/隐藏NSProgressIndicator

我想用线程更新进度条,如此处所述.我正在努力实现这个结果:

  1. 进度条变得可见
  2. 使用循环更新进度条
  3. 进度条消失了

这是我的代码:

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;这种方式工作.

有人能帮我吗?代码片段非常有用,特别是如果后面有解释的话.

objective-c nsprogressindicator ios

3
推荐指数
1
解决办法
309
查看次数

标签 统计

objective-c ×2

cocoa ×1

ios ×1

macos ×1

nsprogressindicator ×1