Я реализую быстрые действия 3D Touch в своем приложении, и у меня возникла следующая проблема:
Когда приложение уже запущено и быстрое действие инициируется с помощью команды «Выполнить действие для элемента ярлыка», оно работает отлично. Однако, когда приложение убивается, а затем запускается с помощью быстрого действия (как, например, FinishLaunchingWithOptions), оно не приводит меня к нужному контроллеру представления, а скорее к домашнему экрану приложения.
Вот мой код:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//... other stuff I'm doing
if let shortcutItem = launchOptions?[UIApplication.LaunchOptionsKey.shortcutItem] as? UIApplicationShortcutItem {
shortcutItemToProcess = shortcutItem
}
return true
ПРИМЕЧАНИЕ. Я читал предыдущие ответы SO, где они сказали, что мне нужно возвращать false в didFinishLaunchingWithOptions, когда приложение было запущено с помощью быстрого действия, чтобы не вызывать executeAction. Однако мне нужно всегда возвращать true в моем методе didFinishLaunching из-за других вещей, которые я там обрабатываю. Однако я попытался вернуть значение false, чтобы посмотреть, не вызывает ли это проблему, и приложение по-прежнему ведет себя так же.
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
shortcutItemToProcess = shortcutItem
}
Вот как я представляю контроллер вида:
func applicationDidBecomeActive(_ application: UIApplication) {
if let shortcutItem = shortcutItemToProcess {
if shortcutItem.type == "com.myName.MyApp.myQuickAction" {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myViewController = storyboard.instantiateViewController(withIdentifier: "myViewController") as! MyViewController
if let navVC = window?.rootViewController as! UINavigationController? {
navVC.pushViewController(myViewController, animated: true)
}
}
Так что это прекрасно работает, когда приложение уже запущено, но оно попадает на домашнюю страницу моего приложения, когда приложение убивается. Что я делаю не так и как мне это решить?