如何在Action Extension中将NSSecureCoding强制转换为MKMapItem

时间:2018-09-07 09:38:03

标签: ios swift nssecurecoding

我正在尝试为我的应用制作一个动作扩展,用户可以在其中添加其当前位置以及其他一些数据。与Apple Maps App共享位置后,我调试了扩展程序,发现Maps发送了四个具有以下内容的提供商:

  • 选定位置的电子名片
  • 用于所选位置的Apple Maps网址
  • 纯文本,它是所选位置的名称
  • 一个MKMapItem

以上所有内容均为NSSecureCoding类型。从NSSecureCoding成功将强制转换为Data并使用vCard的数据初始化String到纯文本和url的String是成功的,但是我还没有找到创建{{1 }}来自我收到的数据的对象。

这是我尝试过的:

MKMapItem

但是失败。我可能必须先将其转换为provider.loadItem(forTypeIdentifier: "com.apple.mapkit.map-item", options: nil) { (content, _) in let item = content as! MKMapItem } ,但找不到Data的{​​{1}}的任何初始化程序

1 个答案:

答案 0 :(得分:0)

使用NSKeyedUnarchiver

itemProvider.loadItem(forTypeIdentifier: "com.apple.mapkit.map-item", options: nil) { (item, error) in

    guard let data = item as? Data else { return }

    do {
         guard let mapItem = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? MKMapItem else { return }
         print(mapItem)
    } catch {
         print("Error unarchiving mapItems, \(error)")
    }