Я делаю асинхронный POST-запрос в приложении для iPhone с помощью этого вызова:
[NSURLConnection connectionWithRequest:req delegate:self];
Похоже, что запрос поступает на сервер просто отлично, но ни один из методов делегата не срабатывает. Я реализовал:
- (void)connection:(NSURLConnection *)connection didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void) connectionDidFinishLoading:(NSURLConnection *)connection
и
- (void) connection:didFailWithError:(NSURLConnection *)connection
Ни одно из сообщений журнала для этих методов никогда не появляется. Документация для соединения с запросом: делегат: говорит:
делегат
Объект делегата для соединения. Делегат будет получать сообщения делегата по мере загрузки. Сообщения делегату будут отправлены в потоке, который вызывает этот метод. Для правильной работы соединения цикл выполнения вызывающего потока должен работать в режиме цикла выполнения по умолчанию.
Я думаю, что вызов выполняется из основного потока (предполагается, что, если я не запустил новый поток явно, все работает в одном потоке правильно?), И я проверил поток следующим образом:
CFRunLoopRef loop = CFRunLoopGetMain();
CFStringRef modeString = CFRunLoopCopyCurrentMode(loop);
NSLog(@"The main loop is running in mode: %@", modeString);
Который создает этот вывод консоли:
2009-09-13 13: 32: 05.611 Стоковые видеозаписи [686: 20b] Основной цикл работает в режиме: kCFRunLoopDefaultMode
Похоже, что это режим работы цикла по умолчанию. Есть ли что-то еще, на что я должен обратить внимание, что может сказать мне, почему мои методы делегата не работают? Делегат определенно не умирает до того, как запрос будет выполнен.
Обновление: CFRunLoopGetCurrent имеет режим kCFRunLoopDefaultMode.
Обновление (17:40 по восточному): Ну, я переключился на использование initWithRequest: Delegate: startImmediately для того, чтобы запустить обратные вызовы, но я все еще хотел бы увидеть пример connectionWithRequest: делегат, который на самом деле хиты делегат вверх.