2012-03-07 183 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

您可以在显示代码的地方打电话给这个方法吗? – 2012-03-07 11:55:26

+0

你是如何将按钮连接到该方法的? – 2012-03-07 11:57:16

+0

该问题与连接POST无关。你按钮事件被称为一次以上。你如何分配按钮上的事件? – 2012-03-07 11:57:16

回答

0

问题在于我将IBOutlets从File'OwnerFirst Responder连接到IB中的按钮。

File's Owner删除电线后,该方法开始只被调用一次。

0

我假设您在代理方法connection:didReceiveData:内打印出该日志。该方法可以针对单个连接多次调用 - 实际上它通常至少被调用两次。

从文档:

委托是周期性地发送连接:didReceiveData:消息作为数据被接收。代表实现负责存储新接收的数据。编辑:我看到,在你最近的编辑中,你已经添加了日志信息(或者我没有马上看到它 - 我对此感到羞耻)。

您是否可能通过通知处理程序调用该方法?如果是这样,你有可能为该通知进行双重注册 - >因此你的处理程序被调用两次。

0

另外请确保在Interface Builder中检查您的按钮的IBAction连接。如果在IB中复制和粘贴按钮,则最终可能会有一个按钮具有2个或多个相同的IBAction连接,这会使该方法只需单击一次即可执行两次。