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与我以前发送的方式相同。但我不知道为什么它不起作用。随时发表评论,但请帮助我。我真的很担心

编辑:

我需要发布到服务器的请求,并得到回应。如果我尝试同步它工作正常,但它阻止主线程。这就是我正在寻求异步的原因。通过委托方法,我试图获取响应数据。

+0

这里您的代码实际上并不表明你调用[_urlConnection开始。我假设你在某个地方这样做? – SteveB

+0

我编辑了我的问题。请检查它 – Perseus

+0

他正在使用startImmediately选项。 –

我终于解决了。希望这会有助于一个人。我将代码清理并正确声明了方法,最后在创建类的对象时,我必须使用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将代码可以保持原样,但委托重新设置为服务器类(的实例,假设这就是委托方法实施)。我认为这第二个想法更糟,因为服务器已经知道如何发起请求。

+0

其实我正在准备一个大的urlRequest,这就是为什么我只发布了原型。你是对的。第二个想法更糟。实际上我试着再次调用相同的executeAsync方法。它正在调用,但不调用委托方法。所以我为此创建了一个新的方法,我的意思是executeRequest – Perseus

+0

即使我检查过的对象是零,一切都很完美。 – Perseus

+0

请再次检查我的问题,我在最后提到了我正在尝试做的事情。 – Perseus

设置NSURLConnectionDelegate到您的.h

然后运行下面的代码中的.m功能

NSURLConnection *connection = [[NSURLConnection alloc] 
           initWithRequest:request 
             delegate:self startImmediately:NO]; 

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
         forMode:NSDefaultRunLoopMode]; 
[connection start];