首页 > 解决方案 > 导航控制器从今天扩展为 nil

问题描述

我有一个今天的扩展,其中有一个启动应用程序的按钮,当应用程序从这个按钮启动时导航控制器变为 nil

我不知道为什么会这样?

这是我在 appdelegate 中的代码:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    var storyBoard: UIStoryboard!
    var mainViewController: MainViewController!
    self.window = UIWindow(frame: UIScreen.main.bounds)
    if UserDefaults.getLanguage() == "ar" {
        storyBoard = UIStoryboard(name: "MainAR", bundle: nil)
    } else {
        storyBoard = UIStoryboard(name: "Main", bundle: nil)
    }

    let viewController = storyBoard.instantiateViewController(withIdentifier: "swRevealController") as! SWRevealViewController
    mainViewController = storyBoard.instantiateViewController(withIdentifier: "mainView") as! MainViewController
    self.window?.rootViewController = viewController
    self.window?.makeKeyAndVisible()

    viewController.setFront(mainViewController, animated: true)


    if url.scheme == "open"
    {
        switch url.host
        {
        case "1"?:
            mainViewController.isTaxi = true
            break
        case "2"?:
           mainViewController.isPfp = true
            break
        case "3"?:
           mainViewController.isDarbi = true
            break
        default:
            break
        }
    }
    return true
}

请问有人可以帮忙吗?

标签: iosswiftuinavigationcontrollerappdelegatetoday-extension

解决方案


这是因为这一行覆盖了故事板导航

self.window?.rootViewController = viewController

你必须将它嵌入到这样的导航中

self.window?.rootViewController = UINavigationController(rootViewController: viewController) 

编辑:在此行之前 init isTaxi

mainViewController.isTaxi = // set it to true / false 
viewController.setFront(mainViewController, animated: true)

//

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    var storyBoard: UIStoryboard!
    var mainViewController:MainViewController!
    self.window = UIWindow(frame: UIScreen.main.bounds)
    if UserDefaults.getLanguage() == "ar" {
        storyBoard = UIStoryboard(name: "MainAR", bundle: nil)
    } else {
        storyBoard = UIStoryboard(name: "Main", bundle: nil)
    }

    mainViewController = storyBoard.instantiateViewController(withIdentifier: "mainView") as! MainViewController

    if url.scheme == "open"
    {
        switch url.host
        {
        case "1"?:
            mainViewController.isTaxi = true
            break
        case "2"?:
           mainViewController.isPfp = true
            break
        case "3"?:
           mainViewController.isDarbi = true
            break
        default:
            break
        }
    }

    let viewController = storyBoard.instantiateViewController(withIdentifier: "swRevealController") as! SWRevealViewController
    viewController.setFront(mainViewController, animated: true)
    self.window?.rootViewController = UINavigationController(rootViewController: viewController)
    self.window?.makeKeyAndVisible()


    return true
}

推荐阅读