Iphone 在UIWebview中检查图像

Iphone 在UIWebview中检查图像,iphone,objective-c,ios4,uiwebview,Iphone,Objective C,Ios4,Uiwebview,我有一个UIWebview,其中显示文本和图像(从中提取的数据和xml提要) 图像的路径由附加到字符串并转换为url的ID组成,然后在webview中作为url放置。然而,这意味着路径上可能并不总是有图像,所以我输入了 NSURL *url = [NSURL URLWithString:imagePath]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *img = [[UIImage alloc] initWithDat

我有一个UIWebview,其中显示文本和图像(从中提取的数据和xml提要) 图像的路径由附加到字符串并转换为url的ID组成,然后在webview中作为url放置。然而,这意味着路径上可能并不总是有图像,所以我输入了

NSURL *url = [NSURL URLWithString:imagePath];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *img = [[UIImage alloc] initWithData:data];
if(img == nil){
    imagePath = @"http://website.co.uk/filesout/pic.jpg";
}
要检查图像是否存在,如果不使用占位符图像,问题是它有点笨重和缓慢


还有其他更优雅的方法吗?

如果占位符图片总是相同的,您应该将其集成到项目中,并在应用程序中交付。因此,它不会在每次使用时下载,而是从主捆绑包中加载。至少对于占位符图片,这应该会加快速度。

我建议在html中使用占位符图像作为默认图像。完整呈现html并显示它。同时加载您的图像。要在已经呈现的html中设置图像,您可以在完全下载图像后立即使用stringByEvaluatingJavaScriptFromString:注入javascript。您必须为img标记设置ID,以标识以后要交换的每个图像,例如图像url的md5哈希。代码可能如下所示:

Objective-C-stringByEvaluatingJavaScriptFromString

- (void)imageLoadedSuccessfullyWithBundlePath:(NSString *)aBundlePath andId:(NSString *)anId
{
   [webview stringByEvaluatingJavaScriptFromString:
    [NSString stringWithFormat:@"document.getElementById('%@').src = '%@';", 
     anId, aBundlePath]];
}

你说的慢是什么意思?图像是同步加载的吗?缓慢的意思是,当您从上一个视图控制器推送到webview时,它在尝试下载图像时变得没有响应。我看到了,我添加了一个非阻塞方式的示例。占位符图像很好,因为它是异步的,只是为了正确地理解你,图像的下载才减慢了速度。让你的应用程序慢下来的是,每次你检查图像是否在那里,它都会被下载。您是否检查过“dataWithContentsOfURL:”是否有超时?另一种方法是将占位符pic的imagepath作为替代imgsrc插入xml文件。因此,您无需关心图像,只需等待webview文档加载即可。