我有一个从Web服务器获取的NSData对象。
该数据对象的内容应该是UIImage。但是当我在下面的代码中使用它时: -
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData * responseData, NSError *err) {
if (err) {
NSLog(@"Err %@",err.description);
}else
{
if (responseData)
{
NSLog(@"Data Length %d ",[responseData length]);
UIImage *img = [[UIImage alloc] initWithData:responseData];
if (img) {
NSLog(@"image in not null");
self.imageView.image = img;
}
else
{
NSLog(@"image is null");
}
}
else
{
NSLog(@"not returning anything");
}
}
}];
输出结果说: -
Data Length 2786779
image is null
所以我猜它不是图像
有没有办法让我知道这个NSData包含哪个类实例
PS: - 我也用过
NSLog("Description %@",data.description);
但它只生成了一个巨大的十六进制代码序列
答案 0 :(得分:2)
好.... 您的服务器可能正在发送图像但其编码。
获取UIImage * img = null并不一定意味着响应数据不是Image。如果你没有解码它,当然它将为空
我认为你的回复数据是用Base64编码的......(大多数服务器做的)
如果是的话,......
首先从此Link
下载.h和.m文件在项目中添加并导入它们。
然后使用此代码
NSString *str = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSData *data = [NSData dataFromBase64String:str];
UIImage *img = [[UIImage alloc] initWithData:data];
这个img会有你的形象。如果您的服务器确实在发送图像。
请注意..此代码中并非所有NSString * str都是UIImage的表示形式 它可能是它的一部分。其余的可以是与此图像相关的信息。 所以你必须只解码响应的图像部分。
希望这会有所帮助......答案 1 :(得分:1)
NSData
对象包含一系列字节,而不是对象(例如UIImages)。但它可以是图像的表示。
您应该检查响应的“Content-Type”标头。它是一种MIME类型,用于指定响应正文中的数据类型(另请参阅wiki Internet media type)。
您可以从NSURLResponse
获取MIME类型作为NSString,如下所示:
NSString* mimeType = [response MIMEType];
(另见NSURLResponse Class Reference)
MIME类型由类型和子类型组成,可能包含“参数”。
例如,text/plain; charset=utf-8
是一种媒体类型,其“类型”是“文本”,其“子类型”是“普通”。它有一个参数指定字节序列的字符编码,在本例中为Unicode UTF-8。
在您的示例中,您会期望“type”等于“image”的MIME类型,例如:
image/gif
,image/jpeg
,image/png
等
答案 2 :(得分:0)
我认为您的数据不是图片的数据。 使用下面的代码将数据记录为NSString并查看结果。
NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);