如何在应用程序委托中为TabView控制器设置属性

时间:2019-04-08 00:41:13

标签: swift tabs navbar appdelegate

我已经阅读了一些建议的帖子,这些帖子可以帮助解决此问题,但找不到与此特定问题相关的内容。

我需要在控制器上设置一个属性,这是在应用程序委托中进行的设置。在上一个使用导航栏的任务中,此方法有效:

func application(_ application: UIApplication, didFinishLaunchingWithOptions
        launchOptions: [UIApplicationLaunchOptionsKey : Any]?) -> Bool {
    // Override point for customization after application launch.
    // Create an ItemStore to hold list of items
    let itemStore = ItemStore()
    // Access the ItemsViewController and set its item store
    let itemsController = window!.rootViewController as! ItemsViewController
    itemsController.itemStore = itemStore

    return true
}

但是,创建一个类似的程序时,我需要使用tab栏,但不能使它正常工作并继续遇到上述错误,请让editcontroller = tabcontroller。 -线

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

    // Override point for customization after application launch.
    // Create an pindatabase
    let pinDataBase = PinDatabase()

    // Access the pairsViewController and set its database
    let tabController = window!.rootViewController as! UITabBarController
    // this edit controller line is where I am stuck
    let editController = tabController.tabBar as! EditViewController
    editController.pinDataBase = pinDataBase

    return true
}

错误是:

  

致命错误:解开可选值时意外发现nil

我要设置属性的控制器不是根控制器,而是第三个选项卡(如果有帮助的话)。

1 个答案:

答案 0 :(得分:0)

您的问题是您尝试将UITabBar投射到您的EditViewController。您需要从标签栏控制器访问视图控制器阵列,并访问实际上是EditViewController的视图控制器。

let editController = tabController.viewControllers[2] as! EditViewController

这将访问第3个视图控制器并根据需要进行投射。