2011-11-15 15 views
0

私のコードは、NSURLDownloadを使用してWebページをダウンロードしようとしています。それは動作しません、そのコマンドラインプログラムです。NSURLDownloadを使用してWebページをダウンロードしています

- (void)startDownloadingURL 
{ 
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/index.html"] 
              cachePolicy:NSURLRequestUseProtocolCachePolicy 
             timeoutInterval:60.0]; 

    // Create the download with the request and start loading the data. 
    NSURLDownload *theDownload = [[NSURLDownload alloc] initWithRequest:theRequest delegate:self]; 

    if (theDownload) { 
     // Set the destination file. 
     [theDownload setDestination:@"/saleh" allowOverwrite:YES]; 
    } else { 
     // inform the user that the download failed. 
     NSLog(@"download has failed!"); 
    } 

} 
+0

何が問題なのですか? 'ダウンロードに失敗しました! 'と表示されますか? '[NSURLDownloadDelegate](http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSURLDownloadDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSURLDownloadDelegate)メソッドを実装しましたか? downloadDidFinish: 'または' download:didFailWithError: '? –

+0

それは私に何かエラーを与えることはありません!私はデリゲートを実装しましたが、うまくいかないようです!私は何が問題なのか分かりません。 –

答えて

0

downloadDidFinishおよびdoanload:didFailWithError:コールバックを実装するようにしてください。

- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error 
{ 
    // Release the connection. 
    [download release]; 

    // Inform the user. 
    NSLog(@"Download failed! Error - %@ %@", 
      [error localizedDescription], 
      [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]); 
} 

EDIT:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLDownload.html#//apple_ref/doc/uid/20001839-BAJEAIEE

具体的には、このコールバックはあなたにそれが失敗した理由の詳細を与える:ここでは

は、使用方法をNSURLDownloadカバーの概要ですあなたの下では、それはコマンドラインだと言いました。非同期コールバックにはNSRunLoopが必要です。参照:

ドキュメント毎の

Cocoa: NSURLConnection not attempting an HTTP Request

initWithRequest:委任:URL要求のための初期化URLのダウンロードを返し、要求のためのデータをダウンロードし始め 。

- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate 

delegate

The delegate for the download. This object will receive delegate messages as the download progresses. Delegate messages will be sent on the thread which calls this method. For the download to work correctly the calling thread’s run loop must be operating in the default run loop mode.

NSURLConnectionは、データをダウンロードするための同期方法を持っています。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-BAJEAIEE

NSURLConnection provides support for downloading the contents of an NSURLRequest in a synchronous manner using the class method sendSynchronousRequest:returningResponse:error:. Using this method is not recommended, because it has severe limitations:

主な制限は、クライアントのブロックですが、それは、コマンドラインアプリで心配です。

+0

それはコマンドラインプログラムです、仕事をdelagates? –

+0

私のプログラムはコマンドラインで、なぜダウンロードしないのですか?そのGUIプログラムではデリゲートを使えないからです! –

+0

コマンドラインは重要ではありません - main.mが呼び出す作業(ダウンロード)を行うクラスを作成してください。そのクラスはそれらのデリゲートコールバックを実装する必要があります。 – bryanmac

0

デリゲートを使用するには、少なくともdownloadDidFinish:download:didFailWithError:を定義する必要があります。 URL Loading System Programming Guideからメソッドをコピーして貼り付けるだけで十分です。

10.7の場合は、正式なプロトコルが存在しない前に、ヘッダーにもプロトコルを使用することを宣言する必要があります。

また、実行ループがあることを確認してください。テストのために、[[NSRunLoop currentRunLoop] run];をそこに貼り付けることはできますが、ループを終了することはおそらくないでしょう。

関連する問題