我使用这个代码:NSURLConnection的过程中更新iPhone UIProgressView下载
NSURLConnection *oConnection=[[NSURLConnection alloc] initWithRequest:oRequest delegate:self];
下载一个文件,我想更新我加载一个子视图的进度条。为此,我使用下面的代码:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[oReceivedData appendData:data];
float n = oReceivedData.length;
float d = self.iTotalSize;
NSNumber *oNum = [NSNumber numberWithFloat:n/d];
self.oDPVC.oProgress.progress = [oNum floatValue];
}
子视图是oDPVC,它的进度条是oProgress。设置progress属性不会更新控件。
从我在网上阅读的文章中,很多人都想要做到这一点,但还没有一个完整的,可靠的样本。另外,还有很多矛盾的建议。有些人认为你不需要单独的线程。有人说你需要一个后台线程进行更新。有些人说不,在后台做其他事情并更新主线程的进度。
我试过所有的建议,而且没有一个适合我。
还有一件事,也许这是一个线索。我使用此代码的applicationDidFinishLaunching过程中加载子视图:
self.oDPVC = [[DownloadProgressViewController alloc] initWithNibName:@"DownloadProgressViewController" bundle:nil];
[window addSubview:self.oDPVC.view];
在XIB文件(我在两个界面生成器和在文本编辑器已审查)进度条宽280个像素。但是当视图打开时,它已经调整到了一半的宽度。另外,该视图的背景图像是default.png。它不是直接出现在默认图像上,而是大约10个像素,在屏幕底部留下一个白色条。
也许这是一个单独的问题,也许不是。
我很感谢您对双保留的评论。我可以站在这个主题上了解更多。 self.oDPVC不是零,因为我成功地将其子视图添加到窗口。 self.oDPVC.oProgress不是零,因为我能够检查其宽度如下: CGRect newFrame = self.oDPVC.oProgress.frame; NSLog(@“Progress width:%f”,newFrame.size.width); 最后,除以零不是问题,因为我的分母是预期的总字节数,并且永远不会为零。 – 2010-03-26 12:26:05
我应该补充一点,当我测试oProgress的宽度时,它是160,而不是它在IB中设置的280。关于进度条的更多线索:有些人报告说,进度条保持为零,并在任何任务结束时跳至100。我的永远不会从零变为零。 – 2010-03-26 12:29:54
解决所有问题。 default.png在它下面有空格,因为在IB中它被调整为为状态栏留出空间,我不知道它。进度条的大小错误,因为不知何故,我在viewDidLoad中有一些代码正在启动另一个UIProgressView或重新启动现有的代码。删除那行代码会导致进度条成为预期的大小,现在加上它的更新,我不需要与线程混在一起。道德:你总是在最后看到的地方找到你想要的东西! – 2010-03-27 03:37:51