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 回答