Я видел подобные вопросы здесь, но я не мог найти решение своей проблемы. У меня есть простой 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 быть кем-то знает лучшее решение?спасибо
Единственная известная мне причина - это отдельный поток (который уже завершается при вызове методов делегата).
Попробуйте NSLog (@ "Is% @ main thread", ([NSThread isMainThread]? @ "": @ "NOT"));
прямо перед созданием соединения по URL
Вы должны освободить
объект 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
, поэтому вам не нужно об этом беспокоиться.
Автоспуск опасен. Вызов делегата выполняется после возврата из функции (асинхронно). Вы храните его где-нибудь еще?