在 applicationDelegate 中初始化和分配视图控制器使 viewController 中的所有 UI 元素为零

Posted

技术标签:

【中文标题】在 applicationDelegate 中初始化和分配视图控制器使 viewController 中的所有 UI 元素为零【英文标题】:Initing and assigning a view controller in the applicationDelegate makes all the UI elements in the viewController be nil 【发布时间】:2016-01-30 12:17:24 【问题描述】:

在我的 ApplicationDelegate 中:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool 

        initMembers()
        runTutorialIfNeeded()
        return true
    

 func initMembers()
    
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        mainViewController = InlineMainViewController()
        window?.rootViewController = mainViewController
        window?.makeKeyAndVisible()
    

但是这一行导致了一个问题:

mainViewController = InlineMainViewController()

当代码到达override func viewDidLoad() 时,所有的UIElements都为零

如果我评论这一行mainViewController = InlineMainViewController() 主情节提要中的所有 UI 元素都不为零

我该如何解决这个问题? 我需要在 applicationDelegate 中保存对主 viewController 的引用,以便在messageMgr: GNSMessageManager 发送事件时与之交互。

【问题讨论】:

你使用的是storyboard还是xib? 【参考方案1】:

你初始化了 ViewController 错误。如果您使用的是故事板,那么您应该这样写:

    let storyboard = UIStoryboard(name: "YourStoryBoardFileName", bundle: nil)
    mainViewController = storyboard.instantiateViewControllerWithIdentifier("your_VC_ID")
    window.rootViewController = mainViewController
    window.makeKeyAndVisible()

如果您使用的是 NIB/XIB 文件,那么您应该这样写:

let mainViewController = YourViewController(nibName:"YourVCNibName", bundle:nil)

如果你只是像 InLineViewController() 一样初始化它,它没有附加任何视图,因此一切都是 nil。

【讨论】:

如何找到我的“your_VC_ID”? gyazo.com/1fac47e1617d5a3d083bf5ed772e85ea 查看 Storyboard ID,这是你的 VC id。 我在您的图片中看到了故事板 ID。不是 VC id 吗? 您必须自己在那里插入值。在你的情况下,你可以/应该在那里写 InLineMainViewController,然后在你的 AppDelegate 中写这个:storyboard.instantiateViewControllerWithIdentifier("InLineMainViewController")。这更清楚了吗? 我以为我只能在那里填写真正的VC类名。好的

以上是关于在 applicationDelegate 中初始化和分配视图控制器使 viewController 中的所有 UI 元素为零的主要内容,如果未能解决你的问题,请参考以下文章

UIStoryBoard 从 ApplicationDelegate 获取第一个视图控制器

我是不是需要来自 ApplicationDelegate 函数的 UIApplication* 应用程序?

为啥使用 ViewController 来管理 ViewController 而不仅仅是 ApplicationDelegate

如何在 iOS 14(SwiftUI) Widget Extension 中初始化 Facebook SDK?

代表声明困境

UIApplicationWillTerminate:NSNotificationCenter 与 Application Delegate