您好我正在尝试从maps.googleapis.com获取图片。以下是我的代码由于某种原因我的网址仍然以Nil的形式返回。难道我做错了什么?
NString *imageSourceString = @"https://maps.googleapis.com/maps/api/staticmap? markers=%2212547%20Hardy%20St,Overland%20Park,Kansas%22&zoom=14&size=576x640&maptype=hybrid& sensor=false";
UIImage* finalBitmap = [UIImage imageNamed:imageSourceString];
if( nil == finalBitmap )
{
// Next, try resolving the image using the string as the file name
finalBitmap = [UIImage imageWithContentsOfFile:imageSourceString];
if( nil == finalBitmap )
{
// Next, try resolving the string as a URL.
NSURL* url = [NSURL URLWithString:imageSourceString];
if( nil != url ) //url is nil at this point
{
NSData* data = [NSData dataWithContentsOfURL:url];
if( nil != data )
{
finalBitmap = [UIImage imageWithData:data];
}
else
{
finalBitmap = nil;
}
}
else
{
finalBitmap = nil;
}
}
}
答案 0 :(得分:2)
那不可能是真正的代码,甚至不会编译。粘贴真实的东西。
首先,它是NSString,而不是NString。
其次,imageSourceString上的imageWithContentsOfFile将失败,因为你给它一个URL,而不是文件名。你可以给它一个文件URL,但这不是这里发生的事情。
第三,不要在真实的应用程序中使用dataWithContentsOfURL - 如果另一端的服务器太慢,它将冻结UI并可能使应用程序崩溃。使用异步网络。关于这个主题,有一系列精彩的WWDC视频。
答案 1 :(得分:2)
这很有效:
NSString *stringURL = @"http://www.yoururl.com";
NSURL *url = [NSURL URLWithString:stringURL];
NSData *imageData = [[NSData alloc] initWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:imageData];
[imageData release];
你的错误是那个
UIImage* finalBitmap = [UIImage imageNamed:imageSourceString];
无法从远程网址获取图片,所以
if( nil == finalBitmap )
将始终为零。
检查服务器是否正确返回图像。