从URL /服务器获取图像

从URL /服务器获取图像

问题描述:

我对iPhone开发相当陌生,并试图从我的应用程序中获取'来自服务器的图像'。从URL /服务器获取图像

我用下面的方法来做到这一点:

- (UIImage *)imageFromURLString:(NSString *)urlString 
{ 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
    [request setHTTPMethod:@"GET"]; 

    NSURLResponse *response = nil; 
    NSError *error = nil; 
    NSData *result = [NSURLConnection sendSynchronousRequest:request   
    returningResponse:&response error:&error]; 
    [request release]; 
    [self handleError:error]; 
    UIImage *resultImage = [UIImage imageWithData:(NSData *)result]; 

    NSLog(@"urlString: %@",urlString); 
    return resultImage; 
} 

此函数不返回预期的图像,虽然我可以在调试器的NSData为Image对象有一定的价值(以字节为单位)看到

虽然,从服务器获取文本的工作非常类似,我得到了预期的值。

- (NSString *)jsonFromURLString:(NSString *)urlString 
{ 

    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
    [request setHTTPMethod:@"GET"]; 

    NSURLResponse *response = nil; 
    NSError *error = nil; 
    NSData *result = [NSURLConnection sendSynchronousRequest:request 
    returningResponse:&response error:&error]; 
    [request release]; 
    [self handleError:error]; 
    NSString *resultString = [[NSString alloc] initWithData:result 
    encoding:NSUTF8StringEncoding]; 

    return [resultString autorelease]; 
} 

此方法工作正常。

有人能帮我理解为什么我没有从服务器获取图像吗?

感谢

最可能的原因是,你没有真正获取的图像,或者你取一个形象,iPhone不能解码。我将首先检查结果的MIME类型([response MIMEType]),并确保它是你所期望的,而不是实际的字符串。然后确保你的类型是UIImage可以处理的类型之一:tiff,jpeg,gif,png,bmp,ico,cur,xbm。

这很可能是你的server're返回实际上不是图像数据,并且可以将网址只是粘贴到浏览器,看看你得到的图像。除了缺少错误检查以外,代码似乎没有任何问题。

当你传递一个非图像的NSData成+ imageWithData消息,你会得到零。你应该检查一下。

我写过RemoteImage类,通过网络异步加载图像。它还会在需要时处理释放内存。看到这个帖子:http://www.dimzzy.com/blog/2009/11/remote-image-for-iphone/

如果你正在尝试做的是通过URL有一个更简单的方式抓住从一个Web服务器的图像。

这是我用:

UIImage* myImage = [UIImage imageWithData: 
    [NSData dataWithContentsOfURL: 
    [NSURL URLWithString: @"http://example.com/image.jpg"]]]; 

如果你想使用它的形象图只是做到以下几点:

// Let's assume the picture is an instantiated UIImageView 
[picture setImage: myImage]; 
[myImage release]; 

我敢肯定是有原因的人可能不想使用这种方法,但我会从这开始,看看它是否会做你需要的。

+1

只要你把它放在一个单独的线程,因此用户界面不会锁定。 – Domness 2011-12-09 20:54:09

+0

为什么你释放myImage?你还没有分配它 – 2013-07-04 12:11:24

这可能不是你的问题直接相关,但我想指出的是,在这里你的错误检查有一个潜在的问题。像这样的具有NSError的引用参数的方法通常不会定义它们在成功时返回的内容。换句话说,你应该检查方法先返回值,只有访问差错指针,如果该方法失败:

NSString *resultString = nil; 
NSData *result = [NSURLConnection sendSynchronousRequest:request 
             returningResponse:&response 
                error:&error]; 
[request release]; 

if(result) { 
    resultString = [[NSString alloc] initWithData:result 
             encoding:NSUTF8StringEncoding]; 
} 
else { 
    [self handleError:error]; 
}