【问题标题】:Getting an error when implementing drop support for my Mac application为我的 Mac 应用程序实现 drop 支持时出错
【发布时间】:2020-07-12 12:08:10
【问题描述】:

当网页被拖入我的应用程序视图时,我正在尝试获取网页的 URL。我使用下面的代码作为 DropDelegate。

    func performDrop(info: DropInfo) -> Bool {
        guard let itemProvider = info.itemProviders(for: ["public.url"]).first else {
            return false
        }
        guard itemProvider.canLoadObject(ofClass: URL.self) else {
            return false
        }
        _ = itemProvider.loadObject(ofClass: URL.self) {url, _ in
            if let url = url {
                DispatchQueue.main.async {
                    do {
                        try self.store.urlToOpen = url.absoluteString
                    } catch {
                        
                    }
                }
            }
        }
        return true
    }

我得到的错误是:

无法实例化类 NSURL。错误:错误域 = NSCocoaErrorDomain 代码 = 4864 "*** -[NSKeyedUnarchiver _initForReadingFromData:error:throwLegacyExceptions:]: 无法理解的存档

我不确定发生了什么以及如何解决此问题。有什么想法吗?

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    这是有效的解决方案。使用 Xcode 12 / macOS 10.15.5 测试

    _ = itemProvider.loadDataRepresentation(forTypeIdentifier: "public.url") {url, _ in
        if let data = data, 
           let path = String(bytes: data, encoding: .utf8), 
           let url = URL(string: path) {
            DispatchQueue.main.async {
                do {
                    try self.store.urlToOpen = url.absoluteString
                } catch {
                    
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2014-06-05
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多