为什么我无法在屏幕上查看图像?

时间:2011-05-05 07:56:48

标签: iphone ios

-(void)parser:(NSXMLParser *)parser
didEndElement:(NSString *) elementName
 namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{

    if ([elementName isEqual:@"image"]) {

        NSLog(@"Encoded Data %@",encodedData); //THIS SHOWS UP FINE
        //lets now show image

        UIImage * decodedImage = [[UIImage alloc] initWithData:[Base64 decode:encodedData]];
        [Image setImage:decodedImage]; //WHERE IS THE IMAGE?
        [encodedData release];
        encodedData = nil;
    }   
}

我使用以下库进行base 64解码。 http://imthi.com/blog/programming/iphone-sdk-base64-encode-decode.php

4 个答案:

答案 0 :(得分:1)

这是错误的。

[Image setImage:decodedImage]; //WHERE IS THE IMAGE?

你可能想要做的是;

[myImageView setImage:decodedImage];

因此,请在您定义UIImageView *的位置发布代码。如果您有一个如此定义的名为 Image 的实例变量,请注意您不应该使用大写字母来启动它,因为这意味着类定义,而不是ivar。

答案 1 :(得分:1)

-(void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *) elementName
 namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {

    if ([elementName isEqual:@"image"]) {

        NSLog(@"Encoded Data %@",encodedData); //THIS SHOWS UP FINE
        //lets now show image

        UIImage * decodedImage = [[UIImage alloc] initWithData:[Base64 decode:encodedData]];
        [yourImageView setImage:decodedImage]; //WHERE IS THE IMAGE?
        //Make sure that you have the imageView added as subview to your current view.
        [encodedData release];
        encodedData = nil;
        [decodedImage release];
    }   
}

答案 2 :(得分:0)

我不知道您是否对服务器有任何控制权,但我不会将图像数据直接放在XML中。为什么不直接将URL放在XML中的图像中,然后使用该URL下载图像?

我还建议使用DOM解析器。我通常使用JSON,因此我不知道哪一个最适合XML,但DOM解析器可以让您的生活更轻松。

答案 3 :(得分:0)

根据您发布的代码以及您详细说明问题的程度,很难找到代码无效的任何原因。当你发布任何问题时,总是尽可能地清楚。借助提供日志输出,屏幕截图,以便此处的人可以准确了解您的问题。

我对您从Web服务获取的数据存有疑问。但正如你所说的那样,正如Jenifer所说,解码就是问题所在。您是否尝试过打印解码数据的描述?

如果它被解码,那么在imageView上添加它可能是个问题。 正如Roger认为你'Image'对象不应该是UIImageView类的实例而是UIImage类,这是一个非常愚蠢的错误,我觉得不是这样。

您可以从编码数据中打印出您获得的NSData日志吗?