我有一个从 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 包含哪个类实例
附言:- 我也用过
NSLog("Description %@",data.description);
但它只生成了一个巨大的十六进制代码序列
最佳答案
嗯…… 您的服务器可能正在发送图像,但它已编码。
获取 UIImage *img = null 并不一定意味着响应数据不是图像。如果你不解码它,它当然是空的
我认为您的响应数据是用 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 的表示 它可能是它的一部分。其余的可以是与此图像相关的信息。 因此您只需解码响应的图像部分。
希望这有帮助....
关于ios - 有什么办法可以知道 NSData 对象包含哪个 Class 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21831613/