我正在尝试使用NSURLDownload下载URL,但是它没有开始下载。在继续之前,必须说我正在为此使用GNUStep。
我的项目概述如下:
MyClass.h:
@interface MyClass : Object {
}
-(void)downloadDidBegin:(NSURLDownload*)download;
-(void)downloadDidFinish:(NSURLDownload*)download;
@end
主码
int main()
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSLog(@"creating url");
NSURL* url = [[[NSURL alloc] initWithString:@"http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/NSURLRequest_Class.pdf"] autorelease];
NSLog(@"creating url request");
NSURLRequest* url_request = [[[NSURLRequest alloc] initWithURL:url] autorelease];
NSLog(@"creating MyClass instance");
MyClass* my_class = [[MyClass alloc] init];
NSLog(@"creating url download");
NSURLDownload* url_download = [[[NSURLDownload alloc] initWithRequest:url_request
delegate:my_class] autorelease];
[pool drain];
}
我在MyClass的两个函数上都有NSLog,两个都没有命中。我该怎么做才能开始下载?还是GNUStep有问题?
最佳答案
NSURLDownload在后台下载,因此对initWithRequest:delegate:
的调用立即返回。
除非您的程序将控制权传递给运行循环(这对于应用程序是自动处理的,但对于工具必须手动执行),否则它将仅执行main()函数的其余部分并终止。
另外,发给您委托的消息是从运行循环中发送的,因此,即使main()没有立即退出,您的委托仍然不会收到downloadDidBegin:
或downloadDidFinish:
,除非您的代码首先调用了的运行方法。
在NSRunLoop
之前,将以下行添加到您的代码中:[pool drain];
有关运行循环的更多信息,请查看Thread Programming Guide。