NSUserActivity для недавно запрошенной сцены не имеет информации о пользователе
В моем приложении у меня есть табличное представление, где каждая ячейка представляет URL-адрес файла. Пользователь может коснуться ячейки и новогоUIScene
откроется представление этого файла...
// In some view controller
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let url: URL = dataSource.itemIdentifier(for: indexPath)!
let userActivity = NSUserActivity(activityType: ViewController.activityType)
userActivity.addUserInfoEntries(from: [
ViewController.ActivityKey.url : url
])
UIApplication.shared.requestSceneSessionActivation(nil,
userActivity: userActivity,
options: nil)
tableView.deselectRow(at: indexPath, animated: true)
}
Как видно из приведенного выше фрагмента, я сохраняю URL-адрес в NSUserActivity
который передается в UIScene
.
Моя проблема в том, что userInfo
всегда пусто в новой сцене.
// In SceneDelegate.swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let navController = window!.rootViewController as! UINavigationController
viewController = navController.viewControllers.last as? ViewController
let userActivity =
connectionOptions.userActivities.first ??
session.stateRestorationActivity
if let someActivity = userActivity {
// ✳️ BREAKPOINT HERE ✳️
viewController.restoreUserActivityState(someActivity)
}
viewController.setupThenOpenDocument()
}
Команды отладчика...
(lldb) p someActivity.userInfo
([AnyHashable : Any]?) $R2 = 0 key/value pairs
Я поэкспериментировал, установив заголовок активности пользователя (я нигде в своем приложении не использую заголовки действий). Название действительно попадает в новую сцену, подтверждая, что активность пользователя, на которую я смотрю, является правильной.