如何检查 iPhone 中是否使用 dataWithContentsOfURL 加载了图像?

发布于 2024-09-25 09:32:19 字数 227 浏览 1 评论 0原文

在我的 iPhone 应用程序中,我使用以下代码行加载图像:

UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];

如何检查是否已加载图像?我的意思是有时它不会给出任何错误,但我有空白而不是图像。我想检查它是否已完全加载,如果没有,请尝试重做一次。

谢谢

In my iPhone app I'm loading images using this line of code:

UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];

How can I check if I have image loaded? I mean sometimes it doesn't give any error, but I have blank white space instead of image. I want to check if it was completely loaded and if not, try to do it again.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜光 2024-10-02 09:32:19

首先,请注意 dataWithContentsOfURL: 是一个阻塞 API,如果在主线程上使用,将导致您的应用程序挂起直至完成。如果您在 3G 或 EDGE 等慢速连接上使用此代码,您的应用程序将在图像加载之前显示为无响应 - 您不希望出现这种情况。

您应该考虑以下选项之一:

  • 使用 NSURLConnection 及其委托方法来下载图像数据、创建图像对象并在完成后更新您的 UI
  • 使用块来结束对 dataWithContentsOfURL: 并将其分派到异步队列上
  • 在单独的线程上执行此工作(不推荐,因为前两个选项可以用更少的代码实现相同的效果)。

不过,这一切都是为了另一个问题。至于您的实际问题,您可以检查返回的数据对象是否有效。文档指出,如果无法创建数据对象,则此方法返回 nil。

如果您想知道失败的原因,您应该使用 dataWithContentsOfURL:options:error: 并传递一个错误指针,您可以在失败时检查该错误指针。

但是,正如我所说,如果您使用 NSURLConnection 方法,您将能够通过实现 connection:didFailWithError: 委托方法来检查其失败原因。

First of all, be aware that dataWithContentsOfURL: is a blocking API and, if used on the main thread, will cause your app to hang until it completes. If you're using this code on a slow connection such as 3G or EDGE, your app will appear to be unresponsive until the image loads - you don't want that.

You should instead consider one of the following options:

  • Using NSURLConnection and it's delegate methods to download the image data, create an image object and update your UI when it's finished
  • Use blocks to wrap up your call to dataWithContentsOfURL: and dispatch it on an asynchronous queue
  • Perform this work on a separate thread (not recommended as the previous two options give you the same effect with less code).

All that is for another question though. As for your actual question you can check whether the returned data object is valid. The docs state that this method returns nil if the data object could not be created.

If you want to know the reason why it failed, you should use dataWithContentsOfURL:options:error: and pass an error pointer which you can check when it fails.

However, as I said, if you use the NSURLConnection method you will be able to check its failure reason by implementing the connection:didFailWithError: delegate method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文