3

NSData dataWithContentsOfURL:url を使用して mp3 をダウンロードしています。これにはしばらく時間がかかり、ファイルのダウンロード中にアプリケーションがハングします。うまく処理したいのですが、ダウンロードの進行状況を表示したいのですが、その方法が見つかりません。

それはUIViewControllerにあり、UIActivityIndi​​catorViewを入れて最初の試みを行い、ダウンロードを開始する前に回転を開始し、その後回転を停止しましたが、何も表示されません。

だから私の質問は本当にこれを処理するための最良の方法は何か教えてください。本当にありがとう

4

2 に答える 2

4

ダウンロードの実行中にメイン スレッドがブロックされ、メイン スレッドで UI の更新が行われるため、何も表示されません。

NSUrlConnectionを使用して非同期にダウンロードし、デリゲート メソッドを実装してスピナーを開始/停止する必要があります。

または、 を使い続けたい場合は、別NSDatadataWithContentsOfURL:urlスレッドでこれを行い、呼び出しの前後にメインスレッドでスピナーを更新する必要があります。

于 2010-05-10T15:40:37.743 に答える
3

同期メソッドを使用しながらこれを実現できますが、ダウンロードを開始する前に、実行ループにアクティビティ インジケーターのアニメーション化を開始する機会を与える必要があります。

これを実現するには、 performSelector:withObject:afterDelay:with delay 0 を使用してアニメーションの開始とダウンロードの間に実行ループを配置するか、(悪いスタイルでは、より危険です) コード内で実行ループを直接呼び出すことができます。

サンプルコード:

- (void)loadPart1 {
  activityIndicator = [[[UIActivityIndicatorView alloc]
                        initWithActivityIndicatorStyle:UIA...StyleGray]
                       autorelease];
  activityIndicator.frame = myFrame;
  [self.view addSubview:activityIndicator];
  [activityIndicator startAnimating];
  [self performSelector:@selector(loadPart2) withObject:nil afterDelay:0];
}

- (void)loadPart2 {
  [NSURLConnection sendSynchronousRequest:request returningResponse:&response
                                    error:&error];
  [activityIndicator stopAnimating];
}

詳細はこちら: http://bynomial.com/blog/?p=15 (ソリューション 1 またはソリューション 2 まで下にスクロールします)。

于 2010-05-10T16:53:40.667 に答える