iOS HTTP请求调用两次

时间:2012-03-07 11:51:35

标签: ios httprequest nsurlrequest http-get

我有一个向服务器发出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 :(得分: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];
}

编辑:我看到你在最新的编辑中添加了日志信息(或者我没有马上看到它 - 对我感到羞耻)。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

还要确保在Interface Builder中检查按钮的IBAction连接。如果您在IB中复制并粘贴按钮,则最终可能会为按钮提供2个或更多相同的IBAction连接,这将导致只需单击一次按钮即可执行两次该方法。