NSURLDownload无法启动

时间:2010-02-22 06:44:10

标签: objective-c cocoa gnustep

我正在尝试使用NSURLDownload下载网址,但它没有开始下载。在继续之前,必须说我正在使用GNUStep。

我的项目大纲如下:

MyClass.h:

@interface MyClass : Object {

}

-(void)downloadDidBegin:(NSURLDownload*)download;
-(void)downloadDidFinish:(NSURLDownload*)download;

@end

的main.m

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的问题吗?

1 个答案:

答案 0 :(得分:2)

NSURLD下载在后台下载,因此对initWithRequest:delegate:的调用会立即返回。

除非你的程序将控制传递给运行循环(这是为应用程序自动处理的,但必须手动为工具完成),否则它将只执行main()函数的其余部分并终止。

此外,发送给您的代理人的邮件是在运行循环中发送的,因此即使main()没有立即退出,您的代理人仍然不会收到downloadDidBegin:downloadDidFinish:,除非您代码首先调用NSRunLoop的运行方法之一。

[pool drain];

之前,将以下行添加到您的代码中

[[NSRunLoop currentRunLoop] run];

有关运行循环的更多信息,请查看Thread Programming Guide