NSURLDownload не запускается - PullRequest
       13

NSURLDownload не запускается

1 голос
/ 22 февраля 2010

Я пытаюсь загрузить URL с помощью 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];
}

У меня есть NSLog для обеих функций в MyClass, и ни одна из них не нажата. Что мне нужно сделать, чтобы начать загрузку? Или это проблема с GNUStep?

1 Ответ

2 голосов
/ 22 февраля 2010

NSURLDownload загружается в фоновом режиме, поэтому вызов initWithRequest:delegate: немедленно возвращается.

Если ваша программа не передаст управление циклу выполнения (это обрабатывается автоматически для приложений, но должно выполняться вручную для инструментов), она просто выполнит оставшуюся функцию main () и завершится.

Кроме того, сообщения вашему делегату отправляются из цикла выполнения, поэтому, даже если main () не завершится немедленно, ваш делегат все равно не получит downloadDidBegin: или downloadDidFinish:, если ваш код не вызвал из NSRunLoop методов запуска.

Добавьте следующую строку в ваш код непосредственно перед [pool drain];:

[[NSRunLoop currentRunLoop] run];

Дополнительную информацию о циклах выполнения можно найти в Руководстве по программированию потоков .

...