Запрос HTTP iOS вызывается дважды - PullRequest
3 голосов
/ 07 марта 2012

У меня есть функция, которая делает GET запрос к серверу.Работает нормально, но почему-то вызывается дважды.Я вызываю функцию при нажатии кнопки.

Это код функции:

-(void) GETasync: (NSString *) path{
    receivedData = [[NSMutableData alloc] init];
    NSURLRequest *request=[NSURLRequest requestWithURL:
                              [NSURL URLWithString: path]
                              cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                              timeoutInterval:60.0];
    NSHTTPURLResponse * response;
    NSError * error;
    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];  
    NSLog(@"data received");
}

Итак, я вижу на выходе:

2012-03-07 16:36:41.509 KW2[24136:bf03] data received
2012-03-07 16:36:41.694 KW2[24136:bf03] data received

У меня также есть функцияЗапрос POST и та же проблема с ним.

Ответы [ 3 ]

0 голосов
/ 07 марта 2012

Проблема была только в том, что я связал IBOutlets от File'Owner и First Responder с кнопками в IB.

После удаления проводов из File's Owner метод начал вызываться только один раз.

0 голосов
/ 07 марта 2012

Также обязательно проверьте соединения IBAction для вашей кнопки в Интерфейсном Разработчике. Если вы копируете и вставляете кнопки в IB, вы можете получить 2 или более идентичных соединения IBAction для кнопки, что приведет к тому, что метод будет выполнен дважды одним нажатием кнопки.

0 голосов
/ 07 марта 2012

Я предполагаю, что вы распечатываете этот журнал в методе вашего делегата connection:didReceiveData:.Этот метод может вызываться несколько раз для одного соединения - на самом деле его обычно вызывают как минимум дважды.

Из документации:

Делегату периодически отправляется соединение: didReceiveData: сообщения по мере получения данных.Реализация делегата отвечает за сохранение вновь полученных данных.

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Append the new data to receivedData.
    // receivedData is an instance variable declared elsewhere.
    [receivedData appendData:data];
}

РЕДАКТИРОВАТЬ: я вижу, что в ваших последних изменениях вы добавили эту информацию регистрации (или, возможно, я не видел ее сразу - позор мне).

Возможно, вы вызываете этот метод обработчиком уведомлений?Если да, возможно, вы дважды зарегистрировались для этого уведомления -> следовательно, ваш обработчик вызывается дважды.

...