我有一个向服务器发出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请求功能,它也有同样的问题。
答案 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'Owner
和First Responder
连接到IB中的按钮。
从File's Owner
删除电线后,该方法开始只被调用一次。
答案 2 :(得分:0)
还要确保在Interface Builder中检查按钮的IBAction连接。如果您在IB中复制并粘贴按钮,则最终可能会为按钮提供2个或更多相同的IBAction连接,这将导致只需单击一次按钮即可执行两次该方法。