1

NSURLDownloadを使用してURLをダウンロードしようとしていますが、ダウンロードが開始されません。続行する前に、私はこれに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の問題ですか?

4

1 に答える 1

2

NSURLDownload はバックグラウンドでダウンロードされるため、呼び出しinitWithRequest:delegate:はすぐに返されます。

プログラムが実行ループに制御を渡さない限り (これはアプリケーションでは自動的に処理されますが、ツールでは手動で処理する必要があります)、残りの main() 関数を実行して終了します。

また、デリゲートへのメッセージは実行ループ内から送信されるため、 main() がすぐに終了しなくても、コードが最初にの run メソッドのいずれかを呼び出さdownloadDidBegin:ない限り、デリゲートは受信しません。downloadDidFinish:NSRunLoop

コードの の直前に次の行を追加します[pool drain];

[[NSRunLoop currentRunLoop] run];

実行ループの詳細については、スレッド プログラミング ガイドを参照してください。

于 2010-02-22T14:17:02.323 に答える