3

我正在使用 NSData dataWithContentsOfURL:url 下载 mp3。这需要一段时间,而文件正在下载应用程序挂起。我想处理好,理想想显示下载进度但找不到方法。

它在 UIViewController 中,我第一次尝试通过放入 UIActivityIndi​​catorView 并在开始下载之前开始旋转,然后停止旋转,但没有出现任何内容。

所以我的问题真的是请有人告诉我处理这个问题的最佳方法是什么?非常感谢

4

2 回答 2

4

什么都不会出现,因为你的主线程在下载时被阻止了,而主线程是 UI 更新发生的地方。

您应该使用NSUrlConnection异步下载并实现委托方法来启动/停止微调器。

或者,如果您想坚持使用NSData's dataWithContentsOfURL:url,您应该在单独的线程上执行此操作,并在调用它之前和之后更新主线程上的微调器。

于 2010-05-10T15:40:37.743 回答
3

您可以在仍然使用同步方法的同时实现这一点,但您需要在开始下载之前给运行循环一个机会来开始为活动指示器设置动画。

您可以通过使用performSelector:withObject:afterDelay:延迟 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 回答