我是一位自学成才的iOS编程新手,并且已经完成了一本初学者教科书。我正在尝试发布我的第一个移动应用程序,所以我正在回头并清理我的代码。我使用的教科书强调“依赖注入”,但我一直在努力将他们的简单示例应用于更复杂的应用程序。Swift - 在AppDelegate.swift中设置依赖注入
该应用程序作为一个shell运行并检索/解析txt文件来填充。我成功连接我的模型,它检索/分析数据,并使用下面的代码需要填充TableViewController:
MyTableViewController {
var data: Data!
}
AppDelegate {
var window: UIWindow?
let data = Data()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let navCon = window!.rootViewController as! MyNavigationController
let tableVC = navCon.topViewController as! MyTableViewController
tableVC.data = data
return true
}
我再嵌入TabBarController内NavigationController因为应用程序将有其他选项卡。我尝试了设置rootViewController的相同过程,然后深入研究,直到我可以设置我的数据变量,但我找不到正确的方法来分层ViewControllers并不断收到错误;
“致命错误:意外发现零而展开的可选值”
我尝试了两种不同的方法:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let tabBarCon = window!.rootViewController as! MyTabBarController
let navCon = tabBarCon.presentedViewController as! MyNavigationController
let tableVC = navCon.topViewController as! MyTableViewController
tableVC.data = data
return true
}
和
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let tabBarCon = window!.rootViewController as! MyTabBarController
let navCon = MyNavigationController()
tabBarCon.viewControllers = [navCon]
let tableVC = navCon.topViewController as! MyTableViewController
tableVC.data = data
return true
}
有没有纠正这一错误的解决方案或者我正在处理这个过程是错误的?再次,我有一个文件,该文件包含一个txt文件,然后创建一个字典。我需要一个单独的TableViewController来访问该字典来填充自己,但我想以最有效的和苹果提升的方式来实现这一点,而不是像我在第一次设计时那样在同一个文件中。
感谢您的帮助!
你是如何创建窗口? –
[iOS self.window可能重复 - 它是什么时候创建的?](https://stackoverflow.com/questions/21380567/ios-self-window-when-is-it-created) –
我开始使用通用单-view应用程序,并且所有视图都是在界面构建器中创建的,而不是以编程方式。 – Frank