раскадровка не загружается в executeActionForShortcutItem, когда приложение убито и перезапущено - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь добавить действие 3d-touch в свое приложение. У меня есть два контроллера представления для двух действий, среди которых один создается программно, а другой - из раскадровки. Оба отображаются правильно, когда приложение свернуто и запущено из 3D-Touch действия. Но когда я закрываю приложение и перезапускаю, открывается только действие с контроллером программного представления , не контроллером раскадровки.

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

Вот мой метод делегата перформанса и мой обработчик для этого -

func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
        completionHandler(handleShortcuts(shortcutItem: shortcutItem))
    }

    func handleShortcuts(shortcutItem:UIApplicationShortcutItem)->Bool{
        switch shortcutItem.type {
        case "com.anuran.ios.place-settings":
            if UDManager.isLoggedIn() {
                let placePickerVC = PlacePickerViewController()
                placePickerVC.isFromSettings=true
                placePickerVC.isFromShortcut=true
                self.window?.rootViewController = placePickerVC
                self.window?.makeKeyAndVisible()
                return true
            }
            break
        case "com.anuran.ios.activity-log":
            if UDManager.isLoggedIn() {
                print("anuran storyboard going to load")
                let storyBoard=UIStoryboard(name: "Main", bundle: nil)
                print("anuran storyboard loaded")
                let activityLogViewController = storyBoard.instantiateViewController(withIdentifier: "ActivityLogVC") as! ActivityLogViewController
                print("anuran VC loading")
                self.window?.rootViewController = activityLogViewController
                self.window?.makeKeyAndVisible()
                print("anuran window visible")
                return true
            }
            break
        default:
            print("")
        }
        return false
    }

Это мое приложение. Метод AddBecomeActive

func applicationDidBecomeActive(_ application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.


        guard let shortcut = shortcutItem else { return }

        print("- Shortcut property has been set")

        let _ = handleShortcuts(shortcutItem: shortcut)

        self.shortcutItem = nil



    }

и, наконец, это мой didFinishLaunchingWithOptions, где я обрабатываю случай обработки действия или нет

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {



        var performShortcutDelegate = true

        if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsKey.shortcutItem] as? UIApplicationShortcutItem {

            print("Application launched via shortcut")
            self.shortcutItem = shortcutItem
            performShortcutDelegate = false
        }else {
            let vc = SplashScreenViewController()
            self.window?.rootViewController = vc
            self.window?.makeKeyAndVisible()
        }

        return performShortcutDelegate

    }
...