2

私がいつ

    Logger *logger = [Logger new];

    NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    __unused NSURLConnection *conn = [[NSURLConnection alloc] 
            initWithRequest:request delegate:logger startImmediately:YES];

... 何も起こりません。委任メソッドは i まで呼び出されません

[[NSRunLoop currentRunLoop]run];

startImmediately:YES私はそれがまさにそれをするだろうと思ったでしょう。

4

1 に答える 1

4

非同期コールバックには NSRunLoop が必要です。見る:

Cocoa: NSURLConnection が HTTP リクエストを試みていない

コマンド ライン アプリにはデフォルトで NSRunLoop がありませんが、GUI アプリにはあります。

ドキュメントから: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

initWithRequest:delegate: 初期化された URL 接続を返し、URL 要求のデータの読み込みを開始します。

- (id)initWithRequest:(NSURLRequest *)request delegate:(id < NSURLConnectionDelegate >)delegate

...接続が正しく機能するためには、呼び出しスレッドの実行ループがデフォルトの実行ループ モードで動作している必要があります。実行ループとモードを変更するには、scheduleInRunLoop:forMode: を参照してください。

于 2011-12-01T05:03:44.033 に答える