Запуск приложения из Siri приводит к тому, что «к NSUserActivity подключено взаимодействие, но оно не обрабатывается»

#ios #swift #siri #nsuseractivity

#iOS #swift #siri #nsuseractivity

Вопрос:

Я могу успешно запустить свое приложение из Siri, но я получаю это сообщение NSUserActivity в отладчике. Я не помню, чтобы видел это сообщение в предыдущих версиях, но, возможно, я не обращал внимания. Чего мне не хватает? Есть ли что-то, что я должен извлечь из какого-либо стека? Установите какой-либо флаг?

(Я могу запустить приложение только на устройстве, а не в симуляторе, но это вопрос другого дня. Siri сообщает мне, что что-то не так, и повторяет попытку.)

 func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {

    if userActivity.activityType != "com.mydomain.myactivity" {
        os_log("The app was called with an invalid activityType")
        return false
    }

    let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
    
    let tabBarController = self.window!.rootViewController as! UITabBarController
    tabBarController.tabBar.barTintColor = UIColor(red: 184.0/255.0, green: 64.0/255.0, blue: 37.0/255.0, alpha: 0.2)

    guard let tabVCs = tabBarController.viewControllers else {
        os_log("restorationHandler: Can't get tabVCs")
        return false
    }
    
    guard let myTargetViewController = mainStoryboard.instantiateViewController(withIdentifier: "myTargetViewController") as? MyTargetViewController else {
        os_log("restorationHandler: Can't get myTargetViewController from storyboard")
        return false
    }
    
    guard let tab1NavViewController = tabVCs[0] as? UINavigationController else {
        os_log("restorationHandler: Can't get tab1NavViewController from tabVCs")
        return false
    }
    
    tabBarController.selectedIndex = 0
    myTargetViewController.calledFromShortcut = true
    
    tab1NavViewController.pushViewController(myTargetViewController, animated: true)
    
    return true
}
  

Комментарии:

1. у вас есть какое-либо решение? Я также сталкиваюсь с такой же проблемой в моем приложении xamarin.iOS

2. @Divyesh_08 Извините, у меня не было времени на это в течение месяца. Нет, я еще не разобрался.

Ответ №1:

Появляется сообщение, потому что вы не обрабатывали взаимодействие с UserActivity. Простой обработчик показан ниже:

 func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    userActivity.interaction?.donate(completion: { error in
         if let error = error {
             print("Donate Interaction with error: (error.localizedDescription)")
         } else {
             print("Donate Interaction Success")
         }
    })
    return true
    }
  

Комментарии:

1. Хотя этот код может ответить на вопрос, было бы лучше включить некоторый контекст, объясняющий, как это работает и когда его использовать. Ответы только с кодом бесполезны в долгосрочной перспективе.

2. Это избавило от необработанной ошибки взаимодействия, но теперь я получаю это: [Intents] -[Взаимодействие NSUserActivity (IntentsAdditions)] Не удается разархивировать interactionPayloadData с ошибкой: Ошибка Domain= NSCocoaErrorDomain Code = 4865 «запрошенный ключ: ‘root'» userInfo ={NSDebugDescription= запрошенный ключ: ‘root’}

3. @TrueBrue вы когда-нибудь исправляли эту ошибку? Я вижу то же самое («ключ запроса: root»)

4. @johnny kehr извините, я сдался и научился с этим жить.

5. @johnny вы когда-нибудь приходили к решению? Я все еще испытываю это (не удается разархивировать interactionPayloadData)