NSURLConnection не называет методы делегата

Я видел подобные вопросы здесь, но я не мог найти решение своей проблемы. У меня есть простой NSURLConnection в основном потоке (По крайней мере, я не создал никакие другие потоки), но мои методы делегата не, названы

[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];

и никакие методы, названные, например.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"didReceiveResponse");
}

self также делегат к NSXMLParser, но я думаю, что это не должна быть проблема, поскольку у меня есть эта работа в моем другом классе в том же проекте. Я уже проверил все 10 раз, но не могу найти проблему.

Я видел некоторый взлом для решения его здесь: http://www.depl0y.com/?p=345, но мне не нравится он, May быть кем-то знает лучшее решение?спасибо

15
задан Burjua 23 July 2010 в 15:56
поделиться

3 ответа

Единственная известная мне причина - это отдельный поток (который уже завершается при вызове методов делегата).

Попробуйте NSLog (@ "Is% @ main thread", ([NSThread isMainThread]? @ "": @ "NOT")); прямо перед созданием соединения по URL

27
ответ дан 1 December 2019 в 00:26
поделиться

Вы должны освободить объект NSURLConnection в - (void) connectionDidFinishLoading: (NSURLConnection *) обратный вызов соединения как указано в документации Apple, нигде в другом месте:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  // Do whatever you want here

  // Release the connection
  [connection release];
}

Не выпускайте его с автозапуском , как предложил Лу Франко.

Если проблема не в этом, то, возможно, вам нужно реализовать все необходимые методы в классе делегата:

- (void) connection: (NSURLConnection *) connection didFailWithError: (NSError *) error

- (void) connectionDidFinishLoading: (NSURLConnection *) соединение

- (void) соединение: (NSURLConnection *) соединение didReceiveData: (NSData *) data

- (void) соединение: (NSURLConnection *) соединение didReceiveResponse: (NSURLResponse * ) response

Делегат сохраняется NSURLConnection , поэтому вам не нужно об этом беспокоиться.

1
ответ дан 1 December 2019 в 00:26
поделиться

Автоспуск опасен. Вызов делегата выполняется после возврата из функции (асинхронно). Вы храните его где-нибудь еще?

4
ответ дан 1 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: