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 に答える