【问题标题】:How to cast NSSecureCoding to MKMapItem in Action Extension如何在动作扩展中将 NSSecureCoding 转换为 MKMapItem
【发布时间】:2018-09-07 09:38:02
【问题描述】:

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

  • 所选位置的电子名片
  • 所选位置的 Apple 地图 URL
  • 纯文本,是所选位置的名称
  • MKMapItem

以上所有内容的类型均为NSSecureCoding。强制转换为 Data 并使用 vCard 的数据初始化 String,对于纯文本和 url 从 NSSecureCoding 成功初始化为 String,但我还没有找到从收到的数据中创建 MKMapItem 对象的方法.

这是我尝试过的:

provider.loadItem(forTypeIdentifier: "com.apple.mapkit.map-item", options: nil) { (content, _) in
    let item = content as! MKMapItem

}

但它失败了。我可能必须先将其转换为Data,但我找不到MKMapItemData 的任何初始化程序

【问题讨论】:

    标签: ios swift nssecurecoding


    【解决方案1】:

    使用 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)")
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2022-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多