我可以从互联网下载ZIP文件。后处理在connectionDidFinishLoading中完成,并且工作正常,除非没有更新UIView元素。例如,我设置了statusUpdate.text = @“解压缩文件”,但直到connectionDidFinishLoading完成后才会显示该更改。同样,直到此方法结束,UIProgressView和UIActivityIndicatorView对象才会更新。connectionDidFinishLoading - 如何强制更新UIView?
有没有什么办法可以在这个方法中强制更新UIView?我尝试设置[self.view setNeedsDisplay],但没有奏效。它似乎在主线程中运行。所有其他命令在这里工作得很好 - 唯一的问题是更新用户界面。
谢谢!
更新:这里是不更新的UIView代码:
-(void)viewWillAppear:(BOOL)animated {
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(processUpdate:) userInfo:nil repeats:YES];
downloadComplete = NO;
statusText.text = @"";
}
-(void)processUpdate:(NSTimer *)theTimer {
if (! downloadComplete) {
return;
}
[timer invalidate];
statusText.text = @"Processing update file.";
progress.progress = 0.0;
totalFiles = [newFiles count];
for (id fileName in newFiles) {
count++;
progress.progress = (float)count/(float)totalFiles;
// ... process code goes here ...
}
}
在随后结束processUpdate的,我设置DownloadComplete等= YES。这种构建&运行没有错误,并按预期工作,除非UIVIEW没有任何更新,直到processUpdate完成之后,然后所有内容一次更新。
感谢您的帮助!
谢谢你的回应!我按照描述(复制和粘贴)实现了它,但它在while()循环中挂起,并且从不输入它。我在模拟器上运行它。任何想法,为什么它挂? – waltcrit 2010-01-10 06:50:04
我的循环条件错误(应该是'> 0'而不是'<0')。我确定了我的答案;也许这是你的代码有什么问题?否则,我没有足够的信息来说明。 – benzado 2010-01-11 02:37:00
这工作,谢谢! – waltcrit 2010-01-12 23:59:02