#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
}
Есть ли что-то еще, что я должен сделать, или это неожиданное поведение?