HighQualityFormat 的 PHImageManager.requestImageForAsset 从不调用 resultHandler

Posted

技术标签:

【中文标题】HighQualityFormat 的 PHImageManager.requestImageForAsset 从不调用 resultHandler【英文标题】:PHImageManager.requestImageForAsset for HighQualityFormat never calls resultHandler 【发布时间】:2016-07-17 02:38:58 【问题描述】:

我有一个展示照片库图像列表的收藏视图,在选择时,我想获取最高质量的版本并提供一个控制器来裁剪它。

我的收藏视图的调用正常工作:。

let options = PHImageRequestOptions()
options.networkAccessAllowed = true

PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: CGSize(width: 480, height: 640), contentMode:.AspectFit, options:options, resultHandler:(image, info)in

    print("PhotosVC RECEIVED image size \(image!.size.width) x \(image!.size.height)")

    cell.ImageView?.contentMode = UIViewContentMode.ScaleAspectFit
    cell.ImageView?.image = image
)

resultHandler 被调用一次或多次 - 通常是两次,第一次返回 60x45,然后再次返回 480x360。

选择一个单元格后,不同的 ViewController 使用 HighQualityFormat 选项调用 requestImageForAsset:

let options = PHImageRequestOptions()
options.networkAccessAllowed = true
options.deliveryMode = PHImageRequestOptionsDeliveryMode.HighQualityFormat

let ret = PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: CGSize(width: 768, height: 1024), contentMode:.AspectFit, options:options, resultHandler:(image, info)in

    print("RootVC RECEIVED image size \(image!.size.width) x \(image!.size.height)")
    // stuff here - never called
)

当我在我的设备(iPad Mini Retina,ios 9.3.2)上运行此代码时,从未调用 resultHandler。 它确实在模拟器上被调用,100% 的时间。似乎是设备独有的错误,或特定于某些照片的错误(在设备上 100% 可重现)

我在这次通话中尝试了很多不同的变体;如果我删除了 deliveryMode = HighQualityFormat 约束,resultHandler 会以较低的分辨率成功调用多次。

欢迎任何想法或见解。

【问题讨论】:

尝试在后台线程上执行此操作,并将synchronous 设置为true。 — 另外,请确保您等待的时间足够长;如果这是通过网络获取的图像,也许真的需要一段时间? 尝试将其放入 dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)) ... ;不幸的是,仍然看到相同的行为,即 resultHandler 块中的代码永远不会执行,即使我等待了几分钟。 我开始怀疑这是否可能是我的 iPad 的问题 - 照片应用程序在以更高分辨率加载旧图像时出现问题,并且我正在拍摄的屏幕截图无法正常显示相机胶卷。打算研究这个角度。 就是这样 - 症状是照片应用程序/相机胶卷中没有出现新照片和屏幕截图,以及问题中描述的行为。设备的硬重置(家庭+锁定 15+ 秒)解决了这个问题。 【参考方案1】:

问题是我的测试设备状态不佳。

主要症状是使用 Apple 应用拍摄的新照片和屏幕截图没有出现在“相机胶卷”或“照片”应用中的任何位置。

设备上的硬重置(家庭+锁定 15 秒)解决了上述症状,现在按预期方式为 HighQualityFormat 调用了 resultHandler。

【讨论】:

干得好。您可能知道自己可以在 48 小时内接受自己的答案,而且您应该这样做。 我不能对此进行足够的投票。我花了几个小时试图修复突然不接受任何解决方案的工作代码。我也是这种情况,感谢您发布此答案

以上是关于HighQualityFormat 的 PHImageManager.requestImageForAsset 从不调用 resultHandler的主要内容,如果未能解决你的问题,请参考以下文章

无法使用设备图像 URL 在设备中加载图像?

关于光的反射和折射的例子?

既是3的倍数又是5的倍数都有哪些

一个三位数既是3的倍数,又是5的倍数。这样的三位数最小是啥

数组的创建,及数组的方法

cnn中的步长的目的和重要性是啥