0

大量のデータを CoreData にインポートしています。インポートの進行状況を示すプログレスバーを表示したい。

まず、進行状況バーを表示しています。次に、インポートしたいデータを数えています。次に、for ループをセットアップします。

  • この for ループでは、最初に coreData オブジェクトを設定します。
  • 次に、進行状況ビューをインクリメントしています。

このループの後、coreData オブジェクトを保存し、progressBar を非表示にしています。

[self.progressView show];

int allFiles = [file count];
int currentFile = 1;

for(NSString *trackid in file) {
    [entidyDesc setName:[track objectForKey:@"theKey"]];
    float progress = [self convertAmountForProgressBar:currentFile maxNum:allFiles];
    self.progressView.progressBar.progress = progress;
}

[self.progressView hide];
[self.managedObjectContext save:nil];

(簡体字)

問題は、progressBar が更新されていないことです。表示されますが、for ループが完了した後、非表示よりも先に更新されます。そのため、進行状況バーは for ループの直後にのみ表示されます。

この問題を解決する方法はありますか?

4

2 に答える 2

2

別のスレッドでインポートを実行し、進捗情報をメイン スレッドに送信し-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]ます。

同時実行の問題のデバッグを楽しんでください。

また、CATransactions を使用するとひどいことができるかもしれませんが、UIKit がそれらすべてを処理することになっているという印象を受けました。

于 2010-11-21T06:39:48.460 に答える
0

次の方法でスレッド化されたアニメーションを有効にしようとしましたか:

- (void)setUsesThreadedAnimation:(BOOL)flag

詳しくは Apple のドキュメントを参照してください。

于 2010-11-20T21:10:36.157 に答える