Быстрые действия 3D Touch не работают при вызове из didFinishLaunchingWithOptions - PullRequest
0 голосов
/ 03 апреля 2019

Я реализую быстрые действия 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)
            }
        }

Так что это прекрасно работает, когда приложение уже запущено, но оно попадает на домашнюю страницу моего приложения, когда приложение убивается. Что я делаю не так и как мне это решить?

...