从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];
我敢肯定是有原因的人可能不想使用这种方法,但我会从这开始,看看它是否会做你需要的。
这可能不是你的问题直接相关,但我想指出的是,在这里你的错误检查有一个潜在的问题。像这样的具有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];
}
只要你把它放在一个单独的线程,因此用户界面不会锁定。 – Domness 2011-12-09 20:54:09
为什么你释放myImage?你还没有分配它 – 2013-07-04 12:11:24