#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)