ios - 如何获取 NSItemProvider 提供的实际数据/内容而不是类型

标签 ios swift drag-and-drop

我是 iOS 11 拖放功能的新手。我知道如何在可以接受该类型对象的 View 中放置特定类型的对象。但是,在调用 loadObject(ofClass:completionHandler:) 之前,我想知道放置的项目所持有的值。

在我的 dropInteraction(_:performDrop:) 委托(delegate)方法中,当我尝试获取 itemProvider 对象的描述时,我只获取类型-

func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {

        if let itemProvider = session.items.last?.itemProvider{
            print("item provider \(itemProvider.description)")
        }
}

当我从 safari 中删除图像时,打印了上面的代码-

item provider <UIItemProvider: 0x600000c43640> {types = (
    "public.jpeg",
    "public.url"
)}

这里我看不到url值。如果我想获取 url 值,我必须这样做-

func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {

    session.items.last?.itemProvider.loadObject(ofClass: URL.self, completionHandler: { itemProvider, err in
      if let urlItemProvider = itemProvider{
          print("url = \(urlItemProvider.absoluteString)")
      }
  })
}

基本上,无论何时放置图像,我都想在尝试加载图像之前将其关联的 url 和图像的详细信息保存在自定义类中。任何帮助将不胜感激。

最佳答案

我发现用 loadObject 方法加载两个对象总是会出错。但是,使用 .copy() 方法复制 itemProvider 是可行的。

例如:

let provider = item.dragItem.itemProvider.copy() as! NSItemProvider
item.dragItem.itemProvider.loadObject(ofClass: URL.self, completionHandler: { (url, _) in
    provider.loadObject(ofClass: String.self) { (data, error) in
    }
})

关于ios - 如何获取 NSItemProvider 提供的实际数据/内容而不是类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352843/

相关文章:

ios - 使用 NSUserDefaults 与 watchkit 共享数据

uitableview - fatal error : unexpectedly found nil while unwrapping an Optional value on table view cell

ios - 将未对齐的缓冲区提供给 MTLBuffer 是否安全?

html - Xcode模拟器,HTML网页发送短信链接无效,为什么?

ios - ld : framework not found FBSDKCoreKit clang

ios - 在 Google map iOS 中闪烁自定义标记

ios - 解析 Facebook - clang : error: linker command failed with exit code 1 (use -v to see invocation)

silverlight - 使用拖放的 Wrap-Panel 记录项目

android - 拖放 android 错误 - 缺少指标?

android - 使用拖放来确定身份?