这是我的代码,它尝试使用NSURLDownload下载网页。但它不起作用,它是一个命令行程序。
- (void)startDownloadingURL
{
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/index.html"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
// Create the download with the request and start loading the data.
NSURLDownload *theDownload = [[NSURLDownload alloc] initWithRequest:theRequest delegate:self];
if (theDownload) {
// Set the destination file.
[theDownload setDestination:@"/saleh" allowOverwrite:YES];
} else {
// inform the user that the download failed.
NSLog(@"download has failed!");
}
}
答案 0 :(得分:0)
确保实现downloadDidFinish和doanload:didFailWithError:callbacks。
以下是有关如何使用NSURLDownload的概述:
具体来说,此回调将为您提供有关其失败原因的更多详细信息:
- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error
{
// Release the connection.
[download release];
// Inform the user.
NSLog(@"Download failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}
编辑:
下面你说它是一个命令行。异步回调需要NSRunLoop。参见:
Cocoa: NSURLConnection not attempting an HTTP Request
根据文档:
initWithRequest:委托: 返回URL请求的初始化URL下载,并开始下载请求的数据。
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate
<强>委托强>
下载代表。该对象将接收委托 下载过程中的消息。将发送代表消息 调用此方法的线程。为了使下载正常工作 调用线程的运行循环必须在默认运行中运行 循环模式。
NSURLConnection具有下载数据的同步方式。
NSURLConnection为下载内容提供支持 NSURLRequest使用类方法以同步方式 sendSynchronousRequest:returningResponse:错误:。使用这种方法是 不推荐,因为它有严重的限制:
主要限制是客户端块,但在命令行应用程序中这是一个问题。
答案 1 :(得分:0)
您需要确保至少定义downloadDidFinish:
和
download:didFailWithError:
使用委托。您只需复制并粘贴URL Loading System Programming Guide中的方法即可。
如果你在10.7上,你应该声明你在标题中也使用了协议,在Lion之前没有正式的协议。
还要确保你有一个运行循环。对于测试,您可以将[[NSRunLoop currentRunLoop] run];
粘贴在那里,尽管它可能不会永远退出循环。