Функции делегата не вызываются - PullRequest
0 голосов
/ 20 августа 2010

Долгое время скрывался, первый постер.

Я делаю модуль 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 и сравнил их оба раза, но могуне найдено никаких расхождений.

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

1 Ответ

2 голосов
/ 20 августа 2010

Вот вопросы, которые нужно задать:

  • Отвечает ли ваш делегат на connectionDidFinishLoading:?
  • Совпадает ли подпись, т. Е. Она принимает другой объект?
  • Задан ли делегат или он равен нулю?(Проверьте это тем же способом)

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

...