Как использовать Быстрые заметки с помощью SwiftUI

#ios #swift #swiftui #nsuseractivity

Вопрос:

Я пытаюсь реализовать быстрые заметки с помощью SwiftUI, а не UIKit или AppKit. Я не уверен, связано ли приведенное ниже поведение с ошибкой или я чего-то не понимаю.

Я уже успешно реализовал NSUserActivity для напоминаний Handoff, Spotlight и Siri, используя модификатор .userActivity() представления. Эти экземпляры NSUserActivity используют NSUserActivity.userInfo словарь для хранения и правильного восстановления содержимого с помощью .onContinueUserActivity(perform: ) методов.

Быстрые заметки требуют использования свойств .persistentIdentifier или .targetContentIdentifier , а не .userInfo только словаря. Однако, когда я устанавливаю для любого из них уникальные идентификаторы, используя приведенный ниже код, они неправильно сохраняются в пользовательской активности.

 MyView()
    .userActivity(ActivityString, updateUserActivity)

private func updateUserActivity(_ activity: NSUserActivity) {
    activity.isEligibleForSearch = true
    activity.isEligibleForHandoff = true
    activity.title = "Title"

    activity.targetContentIdentifier = myItemUniqueID
    activity.persistentIdentifier = myItemUniqueID
    activity.userInfo = ["id": myItemUniqueID]

    print(activity.targetContentIdentifier) // Correctly prints
    print(activity.persistentIdentifier) // Correctly prints
    print(activity.userInfo) // Correctly prints
    }
 

Идентификаторы печатаются правильно при настройке действия пользователя выше. Однако при восстановлении активности пользователя (проверенной с помощью передачи и поиска в центре внимания) строки targetContentIdentifier и persistentIdentifier пусты.

 MyView()
    .onContinueUserActivity(ActivityString, perform: continueUserActivity)

private func continueUserActivity(_ activity: NSUserActivity) {

    print(activity.persistentIdentifier) // Nil
    print(activity.targetContentIdentifier) // Nil
    print(activity.userInfo) // Correctly prints
    }
 

Есть ли что-то еще, что я должен сделать, или это неожиданное поведение?