在导航离开后,中止,监视下载,线程问题?

时间:2012-07-28 07:26:59

标签: iphone xcode multithreading progress-bar nsurlconnection

我正在尝试解决我的应用中的最后一个问题,这对我来说是最大的。

enter image description here

我在屏幕截图中显示了这个downloadView,我通过NSURLConnection异步从Web服务器下载文件/文档。

所有视图组件都可以正常工作(下载按钮,progressBarView,abortButton)等等。

下载开始时,进度条会递增,我可以通过将连接设置为nil并将数据长度设置为零来完全中止下载。

::我的挑战性问题是::

当在后台处理下载并点击“BACK”按钮并导航回firstView然后导航回此downloadView时,我将失去对下载的访问权限。我不能再中止它或监视它。进度条重置为零。但是,我仍然可以看到下载正在通过NSLog for progressBar.progress运行。

我认为这个问题与保留视图和访问线程以及按下“后退”按钮时保持downladView保持活动有关。

对于写得太多感到抱歉,但我正在努力澄清这个问题。

这是一个显示我如何下载文件的基本代码。

-(IBAction)downloadButton:(id)sender{
urlLink= @"http://www.example.com/text.pdf";

NSURLRequest *request= [NSURLRequest requestWithURL:[NSURL URLWithString:urlLink] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];

connectionbook = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
// using the regular delegate connectino methods
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{}

1 个答案:

答案 0 :(得分:2)

核心问题是当你点击Back按钮时,视图控制器对象会被释放(或它应该),当你再次访问该视图时,你会得到另一个从头创建的视图。

所以你有几个选择。拥有您返回的视图以保持强大的参考,因此您在此处显示的视图永远不会真正解除分配。因此,您始终推送同一个对象。你需要保持一些状态来处理viewWillAppear等一直被调用。

另一种解决方案是让一些其他持久对象保持连接,并为视图控制器显示进度访问信息提供一些方法。

另外两条评论。你悲伤“我可以通过将连接设置为nil并将数据长度设置为零来完全中止下载”,这不是正确的方法。当你想要停止连接时,你发送它[conn cancel],然后发送conn.delegate - nil,然后你可以释放它。