如何使NSURLConnection文件下载工作? [英] How to make NSURLConnection file download work?
问题描述
我有一个ViewController声明为:
I have a ViewController declared as:
@interface DownloadViewController : UIViewController
<UITableViewDataSource, UITableViewDelegate>
,我想使用 NSURLConnection 下载文件。 NSURLConnection 只是不启动,委托方法不起作用(例如, connection:didReceiveResponse 从未被调用)。我在一些示例代码中注意到该类是 NSObject 而不是 UIViewController
。
and I want to use NSURLConnection to download files. NSURLConnection simply "doesn't start", the delegate methods don't work (for example connection:didReceiveResponse is never called) . I noticed in some sample code that the class was subclassing NSObject
instead of UIViewController
.
如何组合?我想使用ViewController方法,但是我不能使用 NSURLConnection 。
How do I combine it? I want to use ViewController methods but then I can't use NSURLConnection.
找到一个完全解释的例子如何下载并不容易文件与NSURLConnection。每个人都只关注简单的方法,如 didReceiveResponse 。
It's not so easy to find a fully explained example how to download file with NSURLConnection. Everyone only concentrates on the easy methods like didReceiveResponse.
推荐答案
使用UIViewController而不是NSObject不是你的问题在这里!
我在UIViewController中使用NSURLConnection没有问题!
这是我的代码的一部分(不知道它会如何编译):
Using a UIViewController instead of an NSObject should not be your problem here ! I'm using a NSURLConnection in an UIViewController with no issue ! Here is a part of my code (not sure it will compile as it is) :
//
// MyViewController.h
//
#import <Foundation/Foundation.h>
@interface MyViewController : UIViewController {
@protected
NSMutableURLRequest* req;
NSMutableData* _responseData;
NSURLConnection* nzbConnection;
}
- (void)loadFileAtURL:(NSURL *)url;
@end
-
//
// MyViewController.m
//
#import "MyViewController.h"
@implementation MyViewController
- (void)loadView {
// create your view here
}
- (void) dealloc {
[_responseData release];
[super dealloc];
}
#pragma mark -
- (void)loadFileAtURL:(NSURL *)url {
// allocate data buffer
_responseData = [[NSMutableData alloc] init];
// create URLRequest
req = [[NSMutableURLRequest alloc] init];
[req setURL:_urlToHandle];
nzbConnection = [[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];
[req release];
req = nil;
}
#pragma mark -
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Append data in the reception buffer
if (connection == nzbConnection)
[_responseData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (connection == nzbConnection) {
[nzbConnection release];
nzbConnection = nil;
// Print received data
NSLog(@"%@",_responseData);
[_responseData release];
}
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// Something went wrong ...
if (connection == nzbConnection) {
[nzbConnection release];
[_responseData release];
}
}
@end
如果您计划下载大型文件,请考虑将接收的数据包存储在文件中,而不是将其存储在内存中!
If you plan to download large files, consider storing the received packets in a file instead of storing it in memory !
这篇关于如何使NSURLConnection文件下载工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!