使用Data创建UIImage时发生崩溃

3
在我的应用程序中,我试图从Data实例化一个UIImage。从App Store Connect传来的一些崩溃日志显示,我的代码在这行代码上崩溃:
guard let data = photo.data, let image = UIImage(data: data) else { return nil }

以下是回溯信息,PhotoCache是我控制的最后一个对象,.imageFor(_:)是包含上一行代码的方法。 Crash Logs PFEvanscentData是什么,可能是什么原因导致在这种情况下它崩溃了?
编辑:这是完整的方法。
private var cache = NSCache<NSString, UIImage>()
    
func imageFor(_ photo: Photo) -> UIImage? {
    guard let key = photo.id as NSString? else { return nil }
    if let image = cache.object(forKey: key) {
        return image
    }
    guard let data = photo.data, let image = UIImage(data: data) else { return nil }
    cache.setObject(image, forKey: key)
    return image
}

1
你确定 image = UIImage(data: data) 是你的问题所在吗?默认情况下,从数据中创建的UIImage不会缓存,所以你使用了任何第三方来缓存图像吗? - iUrii
我正在使用一个 NSCache 对象,但是这行代码在请求的图像 不在 缓存中的代码路径中,并且必须从头开始初始化。因此它不应受到 NSCache 的影响。我将在帖子中更新完整的方法。 - Avery Vine
3个回答

0
问题可能出在内存警告上。NSCache不能保证在收到内存警告后立即删除缓存的图像。我建议您子类化NSCache,在子类中使用NSNotificationCenter监听didReceiveMemoryWarningNotification,如果收到警告,则从缓存中删除元素。

0

0
看起来可能是在这个Swift类中使用了一个Objective-C类的问题。我正在看这一行代码。
Data._unconditionallyBridgeFromObjectiveC

你可能需要仔细检查来自Objective-C的NSData实际上是否非空,并且被转换为您发送给UIImage初始化器的正确类型,因为在Obj-C方面没有任何主动执行的内容,您应该确保它在swift方面是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接