有没有办法知道哪个Class实例,NSData对象包含?

时间:2014-02-17 14:27:12

标签: ios iphone objective-c cocoa-touch nsdata

我有一个从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);

但它只生成了一个巨大的十六进制代码序列

3 个答案:

答案 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/gifimage/jpegimage/png

答案 2 :(得分:0)

我认为您的数据不是图片的数据。 使用下面的代码将数据记录为NSString并查看结果。

NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);