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

Ios 如何获取NSItemProvider提供的实际数据/内容,而不是类型,ios,swift,drag-and-drop,Ios,Swift,Drag And Drop,我不熟悉iOS 11的拖放功能。我知道如何在可以接受特定类型对象的视图中加载特定类型的对象。但是,在调用loadObject(of class:completionHandler:)之前,我想知道被删除项所包含的值 在我的dropInteraction(uuuxAE:performDrop:)delegate方法中,当我尝试获取itemProvider对象的描述时,我只获取类型- func dropInteraction(_ interaction: UIDropInteraction, per

我不熟悉iOS 11的拖放功能。我知道如何在可以接受特定类型对象的视图中加载特定类型的对象。但是,在调用
loadObject(of class:completionHandler:)
之前,我想知道被删除项所包含的值

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

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

例如:

let provider=item.dragItem.itemProvider.copy()as!NSItemProvider
loadObject(类的:URL.self,completionHandler:{(URL,))in
中的provider.loadObject(类:String.self){(数据,错误)
}
})

您的问题是什么?似乎您已经计算出它与ItemProvider的内容类型类似,是否有任何方法可以获取这些类型的关联值?这不正是
loadObject(ofClass:completionHandler:)
正在做的吗?对于loadObject,我显式地要求一个特定的类。除此之外,我正在尝试加载资源。我想保存资源,并根据某些条件加载该资源。这就是为什么,我不想调用loadObject(类:completionHandler:),除非我真的想使用那个特定的资源。然而,经过相当多的挖掘,我想,可能没有任何替代方法。我忘记了这一点,我想你现在已经解决了你的问题。问题在于类型标识符和
NSItemProviderReading
类之间存在多对多关系(请参阅)。这意味着给定类型标识符时,不存在“合理的默认值”类来处理它,因为根据具体情况,可以使用多个同样有效的类。这就是为什么显式要求您使用所需的类。
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)")
      }
  })
}