iOS 14 NSItemProvider loadDataRepresentation() 返回指定类型的 nil 数据
Posted
技术标签:
【中文标题】iOS 14 NSItemProvider loadDataRepresentation() 返回指定类型的 nil 数据【英文标题】:iOS 14 NSItemProvider loadDataRepresentation() returns nil data for specified types 【发布时间】:2020-07-22 18:26:09 【问题描述】:设置:
我使用phpickerViewController
允许用户选择照片。我已经实现了PHPickerViewControllerDelegate
协议方法picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult])
。我正在从结果数组中获取itemProvider
。
问题:
我需要访问所选图像的数据。 NSItemProvider
上有一个名为 loadDataRepresentation()
的方法,它采用类型标识符字符串,并应在其完成块中返回图像数据。
当我调用此方法时,有时它会返回数据,有时则不会。我已经为每个提供者的多个注册类型标识符尝试了这个,我看到了同样的事情。有时它会返回 JPEG 数据,但不返回 HEIF,有时只返回 HEIF,有时它根本不会返回任何数据。这是一致的,因为每次我尝试加载其数据时,同一张照片都会显示相同的结果。
当没有数据时,我看到以下错误:
Upload preparation for claim D8C281B7-CCCE-4299-95BF-9355FCF340E4 completed with error: Error Domain=NSCocoaErrorDomain Code=260 "The file “7AB1AB3F-7643-45C1-9DD9-5F5642965C3A.jpeg” couldn’t be opened because there is no such file."
在尝试加载照片数据之前,我需要对照片做些什么吗?也许我在这里错过了一步?这发生在我直接用我的 iPhone XR 拍摄的照片上。我没有使用 iCloud 照片,所有照片都在设备上。
【问题讨论】:
这完全取决于 NSItemProvider 向它注册了什么类型,以及你要求它做什么。但是您没有显示任何代码,因此无法为您提供帮助。 我创建了一个简单的虚拟应用程序来复制问题。当 NSItemProvider 的类型列表为“public.jpeg”时不会出现此问题,但当照片的 NSItemProvider 具有“public.jpeg”和“public.heic”类型时会出现此问题。似乎它可能是一个 ios 错误。 【参考方案1】:“public.image”这个标识符似乎可以获取所有类型的照片。
示例:-
loadDataRepresentation(forTypeIdentifier: "public.image")
【讨论】:
【参考方案2】:如果您在模拟器中遇到此错误,这似乎是操作系统错误,因为执行 Device > Erase All Content and Settings..
重置模拟器已为我解决了此问题。
【讨论】:
以上是关于iOS 14 NSItemProvider loadDataRepresentation() 返回指定类型的 nil 数据的主要内容,如果未能解决你的问题,请参考以下文章
如何获取 NSItemProvider 提供的实际数据/内容而不是类型
NSItemProvider loadItemForTypeIdentifier:options:completionHandler: 适用于任何类型的(二进制)文件
无法读取 NSItemProvider 的preferredPresentationSize