2010-08-20 4 views
0

Долгосрочный lurker, первый раз постер.Функции делегата, не называемые

Я создаю модуль ServerConnection, чтобы сделать его очень модульным и простым, но мне трудно получить вызов делегата. Я видел еще несколько таких вопросов, но ни один из ответов не устранил мою проблему.

ServerConnection настроен как протокол. Таким образом, объект ServerConnection создается в Login.m, который вызывает вызов на сервере, а затем добавляет методы делегирования в Login для обработки, если есть ошибка или если это сделано, они вызываются ServerConnection, как показано ниже.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 

    if([self.delegate respondsToSelector:@selector(connectionDidFinish:)]) { 
     NSLog(@"DOES RESPOND"); 
     [self.delegate connectionDidFinish:self]; 
    } else { 
     NSLog(@"DOES NOT RESPOND"); 
    } 

    self.connection = nil; 
    self.receivedData = nil; 

} 

Он всегда «не отвечает». Я пробовал трюк CFRunLoop (ниже), но он все еще не работает.

- (IBAction)processLogin:(id)sender { 

    // Hide the keyboard 
    [sender resignFirstResponder]; 

    // Start new thread 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    // Acutally call the server 
    [self authenticate]; 

    // Prevent the thread from exploding before we've got the data 
    CFRunLoopRun(); 

    // End thread 
    [pool release]; 

} 

Я скопировал Apple URLCache demo довольно сильно, и сравнил их как много раз, но не могу найти какое-либо несоответствия.

Любая помощь была бы принята с благодарностью.

ответ

2

Вот вопросы, чтобы спросить:

  • ли ваш делегат реагировать на connectionDidFinishLoading:?
  • Соответствует ли подпись, то есть требуется другой объект?
  • Является ли делегат установленным вообще или это ноль? (Проверьте это в этом самом методе)

Если какой-либо из них «НЕТ», вы увидите, что «не отвечает» ... и все одинаково вероятны в вашем приложении, но все легко выяснить.

+0

Большое спасибо за это. Он пропускал 'self.delegate = theDelegate;' в этой функции '- (ID) initWithURL: (NSString *) theURL Withdata: (NSString *) theData делегат: (идентификатор ) theDelegate; { ' – user426140

Смежные вопросы