Как привести NSSecureCoding к MKMapItem в расширении действия - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь создать расширение Action для моего приложения, где пользователь может добавить свое текущее местоположение вместе с некоторыми другими данными. После отладки местоположения с помощью приложения Apple Maps я отладил расширение и обнаружил, что Maps отправляет четырем поставщикам следующее содержимое:

  • визитная карточка выбранного местоположения
  • URL-адрес Apple Maps для выбранного местоположения
  • простой текст, который является названием выбранного местоположения
  • a MKMapItem

Все содержимое выше в типе NSSecureCoding. Принудительное приведение к Data и инициализация String с этими данными для vCard, к String для простого текста и URL завершаются успешно из NSSecureCoding, но я не нашел способа создать объект MKMapItem из полученных данных. .

Вот что я попробовал:

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

}

но это не удалось. Возможно, мне сначала нужно привести его к Data, но я не смог найти инициализатор для MKMapItem с Data

1 Ответ

0 голосов
/ 28 марта 2019

Использовать 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)")
    }
...