如何在Swift中的AppDelegate中获取Viewcontroller

时间:2019-05-16 22:29:10

标签: ios swift iphone storyboard viewcontroller

我打算抛出一个To Do应用程序教程,一切进展顺利,直到遇到困难,因为该教程希望我通过AppDelegate抓住一个视图控制器。

为了更好地解释它,我开始了一个有趣的个人项目,我想在一个应用程序中添加一些不同的工具。

因此,我通过创建TabBarController作为我的第一个viewcontroller进行了说明。因此,我可以将每个工具放在不同的ViewController上,并通过TabBar访问它。

虽然ToDo应用程序教程只有一个NavigationBarController作为它的主要rootViewController,但由于没有像教程一样无法获取所需的ViewController,所以我丢了它。

下面,我将提供我正在使用的StoryBoard的教程的委托代码。因此,您可以看到我尝试访问的内容。

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

{"serviceErrorCode":100,"message":"Not enough permissions to access: GET /me","status":403} 

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 }

1 个答案:

答案 0 :(得分:0)

您的rootViewController是UITabBarController,它将UIViewController作为其子视图(子视图)。

您已经添加了UINavigationBarController(这是VC的子类)。因此,您拥有的代码将为您提供NavController而不是Tasks。您将需要让NavController的子级来获取Tasks。

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