Как получить Viewcontroller в AppDelegate в Swift - PullRequest
0 голосов
/ 17 мая 2019

Я собирался добавить учебник по To Do, и все шло хорошо, пока я не столкнулся с трудностями, потому что учебник хотел, чтобы я захватил viewcontroller через AppDelegate.

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

Итак, я заявил, создав TabBarController в качестве моего первого viewcontroller.Итак, я могу отделить каждый инструмент от другого ViewController и получить к нему доступ через TabBar.

В то время как у руководства по ToDo был только один NavigationBarController в качестве основного rootViewController, я потерял его, потому что не могу получить нужный ViewController, как это было в учебнике.

Ниже я предоставляю код делегата, который был у Учебника, с StoryBoard, который я использую.Итак, вы можете увидеть, что я пытаюсь получить доступ.

https://imgur.com/mefbux2 https://imgur.com/ygXru2r

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

        //initialize TaskStore
        let taskStore = TaskStore()

        let todoTasks = [Task(name: "Meditate"), Task(name: "Banana")]
        let doneTasks = [Task(name: "Netflix")]

        taskStore.tasks = [todoTasks, doneTasks]

        //Grab the Tasks Controller
        let tasks = window?.rootViewController?.children.first as? Tasks

        //Set the taskstore accordingly
        tasks?.taskStore = taskStore

        return true
    }

Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

1 Ответ

0 голосов
/ 17 мая 2019

Ваш rootViewController - это UITabBarController, и он принимает UIViewController в качестве подпредставлений (дочерних).

Вы добавили UINavigationBarController (который является подклассом VC). Так что код, который вы имеете, даст вам NavController, а не задачи. Вам нужно будет получить детей от NavController, чтобы получить задачи.

if let navController = window?.rootViewController?.children.first ? UINavigationController {
    let tasks = navController?.children.first ? Tasks 
}
...