私はこれを1日機能させようとしてきましたが、まだ失敗しています。アプリのインストール時に、バンドルからアプリの Documents フォルダーに多数のファイルをコピーしたいのですが、これにより、アプリがスプラッシュ スクリーンを表示してユーザーを長時間待たせることになります。
そこで、ファイルがドキュメント フォルダーにコピーされるたびに更新されるサブビューとして UIProgressView を使用して、最初の UIAlertView を作成すると考えました。ただし、アラートが表示され、進行状況バーは更新されません。私の論理は次のとおりです。
- UIProgressView と UIAlertView を ViewController のインスタンス変数として設定します。
- ViewDidLoad で、アラートを提示し、デリゲートを設定します
- (void)didPresentAlertView:(UIAlertView *)alertView
ファイルをコピーして UI を更新する for ループを実行します。コードは次のとおりです。- (void)didPresentAlertView:(UIAlertView *)alertView{ NSString *src, *path; src = // path to the Bundle folder where the docs are stored // NSArray *docs = [[NSFileManager defaultManager]contentsOfDirectoryAtPath:src error:nil]; float total = (float)[docs count]; float index = 1; for (NSString *filename in docs){ path = [src stringByAppendingPathComponent:filename]; if ([[NSFileManager defaultManager]fileExistsAtPath:path]) { ... // Copy files into documents folder [self performSelectorOnMainThread:@selector(changeUI:) withObject:[NSNumber numberWithFloat:index/total] waitUntilDone:YES]; index++; } } [alertView dismissWithClickedButtonIndex:-1 animated:YES]; }
そしてChangeUIのコードは
- (void) changeUI: (NSNumber*)value{
NSLog(@"change ui %f", value.floatValue);
[progressBar setProgress:value.floatValue];
}
ただし、NSLog はすべての中間値を出力しますが、これは UI を 0 から 1 に更新するだけです。ここで誰かが私が間違っていることを知っていますか?
前もって感謝します。