0

我有一个很长的循环计算。为了让用户了解进度,我希望更新一些显示在 UILabels 中的输出数据,以便用户可以查看临时输出。

// Run Activity for Year
    for (int day = 1; day < 366; day++) {
        for (int hour = 1; hour < 25; hour++) {
            for (int minute = 1; minute < 61; minute++) {
                display = (day*10000)+(hour*100)+minute;
                self.displayTest.text = [[NSString alloc] initWithFormat: @"%d", display];
            }
        }
    }

显然 self.display.text 在完成之前不会更新-(void) viewDidAppear:(BOOL)animated

我如何让它刷新数据,比如小时循环完成时?您是否放入了一个幻像按钮并刷新它。这让我觉得有点粗鲁。我不想求助于使用活动指示器或进度视图。谢谢。

4

1 回答 1

1

为什么不在单独的逻辑上执行逻辑NSThread并偶尔在主线程上运行 UI 更新?例如,每次所有“小时”迭代完成时(在每个“天”之后达到 24 次),在主线程上执行您的 UI 逻辑。


例子:

- (void)updateUI:(NSNumber*)display {
    self.displayTest.text = [[NSString alloc] initWithFormat: @"%@", display];
}

- (void)yearStuff {
    for (int day = 1; day < 366; day++) {
        int display;
        for (int hour = 1; hour < 25; hour++) {
            for (int minute = 1; minute < 61; minute++) {
                display = (day*10000)+(hour*100)+minute;
            }
        }
        [self performSelectorOnMainThread:@selector(updateUI:) withObject:[NSNumber numberWithInteger:display] waitUntilDone:YES];
    }
}

- (void)viewDidAppear:(BOOL)animated {
    [self performSelectorInBackground:@selector(yearStuff) withObject:nil];
}
于 2013-07-07T14:40:10.277 回答