代码之家  ›  专栏  ›  技术社区  ›  Nippysaurus

nsurldownload未启动

  •  1
  • Nippysaurus  · 技术社区  · 14 年前

    我正在尝试使用nsurldownload下载一个URL,但它没有开始下载。在继续之前,必须说我正在为此使用gnustep。

    我的项目大纲如下:

    MyClass:H:

    @interface MyClass : Object {
    
    }
    
    -(void)downloadDidBegin:(NSURLDownload*)download;
    -(void)downloadDidFinish:(NSURLDownload*)download;
    
    @end
    

    主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 回复  |  直到 14 年前
        1
  •  2
  •   Josh Freeman    14 年前

    在后台下载,所以调用 initWithRequest:delegate: 立即返回。

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

    另外,发送给委托的消息来自运行循环中,因此即使main()没有立即退出,您的委托仍然不会收到 downloadDidBegin: downloadDidFinish: 除非你的代码第一次调用 NSRunLoop 运行方法。

    在代码中添加以下行 [pool drain]; :

    [[NSRunLoop currentRunLoop] run];

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