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

时间:2019-05-29 03:47:46

标签: ios swift drag-and-drop

我是iOS 11拖放功能的新手。我知道如何在可以接受该类型对象的视图中放置对象时加载该类型的对象。但是,在调用loadObject(ofClass:completionHandler:)之前,我想知道被删除项所持有的值。

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

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

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

当我从野生动物园中放图片时,上面的代码已打印-

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和有关图像的详细信息保存在自定义类中。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我发现使用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 } }