1

我有一个服务器类,它具有 NSURLConnection 的委托方法。我还有另一个名为 SendRequest 的类,它将 NSMutableURLRequest 发送到服务器类。在服务器类中,我有两种方法称为

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

编辑 :

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

4

3 回答 3

1

我认为您对系统的描述与发布的代码不符,它解释了您描述的问题。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 代码可以保持原样,但将委托设置为 Server 类的实例(再次假设这是实现委托方法的地方)。我认为第二个想法更糟糕,因为服务器已经知道如何启动请求。

于 2012-05-04T15:00:47.443 回答
-1

NSURLConnectionDelegate设置为您的 .h

然后在 .m 函数中运行以下代码

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

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
                      forMode:NSDefaultRunLoopMode];
[connection start];
于 2014-06-26T05:31:26.283 回答
-1

我终于解决了。希望这会对某人有所帮助。我清理了代码并正确声明了方法,最后在为类创建对象时,我必须使用 initwithDelegate:self 。最后调用 NSURLConnection 委托方法。

于 2012-05-14T07:14:10.503 回答