从URL /服务器获取图像

时间:2009-08-17 03:56:28

标签: iphone uiimage nsurlconnection

我对iPhone开发很新,并试图在我的应用程序中获取“来自服务器的图像”。

我正在使用以下方法执行此操作:

- (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;
}

虽然我可以在调试器中看到Image对象的NSData有一些值(以字节为单位),但是这个函数不会返回预期的图像

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

- (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];
}

此方法正常。

有人可以帮我理解为什么我没有从服务器上获取图片吗?

由于

5 个答案:

答案 0 :(得分:29)

如果您要做的只是通过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 :(得分:2)

我编写了RemoteImage类来异步加载网络上的图像。它还可以在必要时释放内存。请参阅此帖子:http://www.dimzzy.com/blog/2009/11/remote-image-for-iphone/

答案 2 :(得分:1)

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

答案 3 :(得分:1)

很可能你的服务器返回的内容实际上并不是图像数据,你可以将网址粘贴到浏览器中,看看你是否获得了图像。除了缺少错误检查之外,代码似乎没有任何问题。

当您将非图像NSData传递到+ imageWithData消息时,您将获得nil。你应该检查一下。

答案 4 :(得分:1)

它可能与您的问题没有直接关系,但我确实想指出您的错误检查存在潜在问题。像这样具有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];
}