在 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