如何使用 NSItemProvider 的新 Async loadItem 方法加载 URL?

How do I load a URL using NSItemProvider's new Async loadItem method?

将文件从我的桌面拖动到我的应用程序时,我在 SwiftUI 的 DropDelegate 中抓取文件 URL 时遇到困难。

我正在 NSItemProvider 上使用异步 loadItem 调用,其中 returns 和 NSSecureCoding。我假设我可以将结果转换为 NSURL,但它总是失败。

let url = try await (urlProvider
    .loadItem(forTypeIdentifier: UTType.url.identifier) as? NSURL

如果我尝试强制转换,我会收到以下错误:

Could not cast value of type 'Foundation.__NSSwiftData' to 'NSURL'.

我在代码中的其他地方成功地使用了相同的调用并转换为 NSDictionary。

这是在Xcode13.4,Swift5。 我在我的沙盒功能中具有对用户选择的文件的读取权限。

谁能帮忙指出我做错了什么? 谢谢。

我必须转换为 Data,然后从中构建 URL

if let data = try await urlProvider
    .loadItem(forTypeIdentifier: UTType.fileURL.identifier) as? Data {
    url = URL(dataRepresentation: data, relativeTo: nil) }