2012-03-07 1 views
3

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

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

-(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, и это та же беда с ним.

+0

Не могли бы вы показать код, где вы звоните этому методу? –

+0

Как вы подключили кнопку к этому методу? –

+0

Проблема не имеет ничего общего с подключением POST. Событие кнопки вызывается morethan один раз. Как вы оцениваете события на своей кнопке? –

ответ

0

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

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

0

Я предполагаю, что вы распечатываете этот журнал в рамках своего метода делегирования 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]; 
} 

EDIT: Я вижу, что в ваших последних правок вы добавили, что записи информации (или, может быть, я не видел его сразу - позор мне).

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

0

Также не забудьте проверить соединения IBAction для вашей кнопки в Interface Builder. Если вы копируете и вставляете кнопки в IB, у вас может быть два или более одинаковых соединения IBAction для кнопки, что приведет к тому, что этот метод будет выполняться дважды одним щелчком мыши.