0

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

在此处输入图像描述

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

所有视图组件都可以完美运行(下载按钮、progressBarView、abortButton)等等。

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

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

当在后台处理下载时,我单击“返回”按钮并导航回 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{}
4

1 回答 1

2

核心问题是,当您点击后退按钮时,视图控制器对象会被释放(或者应该),当您重新访问该视图时,您会从头开始创建另一个视图。

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

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

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

于 2012-07-28T14:32:23.340 回答