我正在使用此调用在iPhone应用程序中发出异步POST请求:
[NSURLConnection connectionWithRequest:req delegate:self];
请求似乎很好地到达服务器,但没有任何委托方法被命中。我已经实施了:
- (void)connection:(NSURLConnection *)connection didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void) connectionDidFinishLoading:(NSURLConnection *)connection
和
- (void) connection:didFailWithError:(NSURLConnection *)connection
这些方法的日志消息都没有出现。 connectionWithRequest的文档:delegate:说:
委托
连接的委托对象。代理将在加载过程中收到委托消息。发送给委托的消息将在调用此方法的线程上发送。为了使连接正常工作,调用线程的运行循环必须在默认的运行循环模式下运行。
我认为调用是从主线程开始的(假设,如果我没有显式启动新线程,一切都在一个线程中运行正确吗?),我用这个检查线程:< / p>
CFRunLoopRef loop = CFRunLoopGetMain();
CFStringRef modeString = CFRunLoopCopyCurrentMode(loop);
NSLog(@"The main loop is running in mode: %@", modeString);
创建此控制台输出:
2009-09-13 13:32:05.611素材库[686:20b]主循环以模式运行:kCFRunLoopDefaultMode
所以,这听起来像是默认的运行循环模式。还有什么我应该看的,可以告诉我为什么我的委托方法没有被击中?在请求完成之前,代表肯定不会死亡。
更新:CFRunLoopGetCurrent的模式为kCFRunLoopDefaultMode。
更新(东部时间下午5:40):嗯,我已经切换到使用initWithRequest:delegate:startImmediately以便回调,但我仍然希望看到一个connectionWithRequest的例子:实际命中的委托代表了。
答案 0 :(得分:3)
答案 1 :(得分:1)
有两件事突然袭来我:
connection: (NSURLConnection *) connection didFailWithError: (NSError *) error
+ connectionWithRequest:delegate:
获得有效的连接。它可能甚至没有启动请求。