NSURLConnection委托方法没有被调用
我有一个服务器类具有NSURLConnection的委托方法。我有另一个名为SendRequest的类,它将NSMutableURLRequest发送到服务器类。 在服务器类我有两种方法称为NSURLConnection委托方法没有被调用
- (void)executeAsync:(NSMutableURLRequest)urlRequest timeOutInterval:(int)timeOut
{
_urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];];
}
- (void)executeSync:(NSMutableURLRequest)urlRequest
{
NSData* respData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
}
一切工作正常,直到在这里,我能够调用上面从sendRequest将类,它调用委托方法executeAsync方法。
现在我在SendRequest类中添加了一个新方法,它将调用Server类中的executeRequest方法。
- (void)executeRequest:(NSMutableURLRequest)urlRequest
{
_urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];];
}
这次,我被困了。 executeRequest方法正在调用,但它在处理URL请求时未调用其委托方法。我在这里被打了很多小时。
一切似乎都是正确的,我发送的urlRequest与我以前发送的方式相同。但我不知道为什么它不起作用。随时发表评论,但请帮助我。我真的很担心
编辑:
我需要发布到服务器的请求,并得到回应。如果我尝试同步它工作正常,但它阻止主线程。这就是我正在寻求异步的原因。通过委托方法,我试图获取响应数据。
我终于解决了。希望这会有助于一个人。我将代码清理并正确声明了方法,最后在创建类的对象时,我必须使用initwithDelegate:self。最后调用NSURLConnection委托方法。
我认为您对系统的描述与发布的代码不符,并且它解释了您描述的问题。 SendRequest类应该依赖Server类来执行服务器请求。
它看起来像SendRequest类将连接委托设置为self。我猜所有这些委托方法都是在Server类上实现的。
尝试做你的描述建议什么....
// SendRequest.m
- (void)executeRequest:(NSMutableURLRequest)urlRequest
{
// however you get ahold of your server...
Server *myServer = [Server sharedInstance];
// let it do the work. it has the delegate methods
[myServer executeAsync:urlRequest];
}
另外,该sendRequest将代码可以保持原样,但委托重新设置为服务器类(的实例,假设这就是委托方法实施)。我认为这第二个想法更糟,因为服务器已经知道如何发起请求。
设置NSURLConnectionDelegate到您的.h
然后运行下面的代码中的.m功能
NSURLConnection *connection = [[NSURLConnection alloc]
initWithRequest:request
delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[connection start];
这里您的代码实际上并不表明你调用[_urlConnection开始。我假设你在某个地方这样做? – SteveB
我编辑了我的问题。请检查它 – Perseus
他正在使用startImmediately选项。 –