Как установить свойство в делегате приложения для контроллера tabview - PullRequest
1 голос
/ 08 апреля 2019

Я прочитал несколько из предложенных постов, которые должны были помочь с этой проблемой, но не смог найти что-то для этой конкретной проблемы.

Мне нужно установить свойство на моем контроллере, в книге говорится, что это нужно сделать в делегате приложения. В предыдущем назначении с использованием навигационной панели это работало:

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
}

Однако, для создания аналогичной программы мне нужно использовать панель вкладок, но я не могу заставить ее работать и продолжаю сталкиваться с ошибкой, описанной выше, в let 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
}

Ошибка:

фатальная ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

Контроллер, на котором я пытаюсь установить свойство, - это не корневой контроллер, а третья вкладка, если это помогает.

1 Ответ

0 голосов
/ 08 апреля 2019

Ваша проблема - ваша попытка привести UITabBar к вашему EditViewController.Вам нужно получить доступ к массиву контроллеров представления из контроллера панели вкладок и получить доступ к тому, который на самом деле является EditViewController.

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

. Это позволит получить доступ к третьему контроллеру представления и привести его к необходимости.

...