На NSRunLoop требуется уточнение - PullRequest
2 голосов
/ 01 декабря 2011

Когда я

    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];

... ничего не происходит. Методы делегатов не вызываются до тех пор, пока я

[[NSRunLoop currentRunLoop]run];

Я бы подумал, что startImmediately:YES сделает именно это.

1 Ответ

4 голосов
/ 01 декабря 2011

асинхронные обратные вызовы требуют NSRunLoop.См .:

Какао: NSURLConnection не пытается HTTP-запрос

приложения командной строки по умолчанию не имеют NSRunLoop - приложения графического интерфейса делают.Из документов: 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: для изменения цикла выполнения и режима.

...