31

我在写一个使用NSURLConnection与服务器连接的应用程序。如何获得NSURLResponse主体?

在委托方法didreceiveresponse中,如果状态码是404,我取消了连接,并且我想显示一条消息,其中包含服务器中生成的自定义错误。

问题是,从响应对象,我只能得到statuscode,标题,mimetype等,但没有正文。

如何从NSURLResponse获得正文消息?

回答

26

你为什么取消连接?毕竟,404也可以拥有内容主体。只是不要取消它,让程序调用下一个委托NSURLConnection方法。 当发送数据[内容正文] - (void)connection:(NSURLConnection *) didReceiveData:(NSData *)被调用时,您需要在那里检索数据。 Read corresponding part in the docs

服务器对请求的响应可以看作两部分:描述内容和URL内容数据的元数据。 大多数协议通用的元数据由NSURLResponse类封装,包含MIME类型,预期内容长度,文本编码(如果适用)以及提供响应的URL。

NSURLConnection和NSURLDownload类提供了一个接口,用于创建由NSURLRequest对象指定的连接并下载内容。 NSURLConnection对象将数据提供给从原始源接收的委托,而NSURLDownload对象将请求数据直接写入磁盘。这两个类都提供广泛的委托支持来响应重定向,身份验证挑战和错误条件。

作为一个例子委托执行:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData{ 
    NSLog(@"String sent from server %@",[[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding]); 

} 
+2

如果你正在做一个同步调用,但是,你没有使用委托方法。你马上得到结果:[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err] – Oscar 2012-12-12 22:49:42