我正在尝试创建一个简单的NSURLConnection,以使用GET请求与服务器通信。连接工作正常,但NSURLConnection的委托方法永远不会被调用..
这是在做什么:
NSString *post = [NSString stringWithFormat:@"key1=%@&key2=%@&key3=%f&key4=%@", val1, val4, val3, val4];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease] ;
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.domain.com/demo/name/file.php?%@", post]]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];
实现了以下委托方法,但没有一个被调用..
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"did fail");
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"did receive data");
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"did receive response ");
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"did finish loading");
[connection release];
}
我错过了什么吗?
答案 0 :(得分:136)
尝试在主线程上运行操作:
NSURLConnection * connection = [[NSURLConnection alloc]
initWithRequest:request
delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[connection start];
答案 1 :(得分:22)
你是在后台线程上调用它吗?如果您在后台线程上执行此操作,则可以在调用委托之前退出该线程。
答案 2 :(得分:1)
尝试检查收到的响应的长度,它不应该获得0字节的数据。
答案 3 :(得分:1)
除了检查是否从主线程调用请求之外,您还可以检查是否向系统返回执行时间(如果退出“main”)。 我有一些测试代码将保持循环,直到委托被调用:它永远不会被调用,因为系统需要做的事情,以便在主线程中调用委托。