在App Delegate中设置Init VC?

问题描述 投票:0回答:3

我正在尝试使用我的应用程序的VC初始化我的核心数据堆栈。 为此,我想在加载时将我创建的核心数据管理器传递到第一个VC中。

我认为该代码将coredatamanager传递到VC有意义,但是无论以哪种方式编写此代码,我都会出错,我确定我缺少一些简单的东西吗?

        // Initialize Storyboard
    let storyboard = UIStoryboard(name: "RoutineController", bundle: Bundle.main)

    // Instantiate Initial View Controller
    if let viewController = storyboard.instantiateInitialViewController() as? ViewController {
        // Configure View Controller
        viewController.coreDataManager = coreDataManager

        // Set Root View Controller
        window?.rootViewController = viewController
    }

错误很简单:

使用未声明的类型'ViewController'

但是,如果我删除“为? ViewController',我在以下一行看到一个错误,即viewController没有属性coreDataManager。

我需要在发送到的视图控制器的viewdidload中定义某种委托吗?

编辑修改了我的代码以纠正情节提要ID,但是{}内的代码似乎没有执行,由于if失败,我得到了我写的打印错误,因此这仍然不是设置viewController的正确方法...有什么想法吗?

        // Initialize Storyboard
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

    // Instantiate Initial View Controller
    if let viewController = storyboard.instantiateInitialViewController() as? RoutineController {

        // Configure View Controller
        print("SENDING THIS INFO TO THE FIRST VC \(self.coreDataManager)")
        viewController.coreDataManager = self.coreDataManager
        // Set Root View Controller
        window?.rootViewController = viewController
    } else {
        print("WE COULDNT SET VIEWCONTROLLER AS THE DESIGNATED VC SO MOC WASNT PASSED")
    }
ios swift core-data appdelegate
3个回答
1
投票

这是你的问题:

as? ViewController

应该

as! UIViewController

或者,这也应该起作用:

as! RoutineController

0
投票

在情节提要中选择RoutineController并设置情节提要ID

在此处输入图片说明

然后在此处使用情节提要ID:

    if let viewController = storyboard.instantiateViewController(withIdentifier: "<storyboardID>") as? RoutineController {

0
投票

解决的办法是,需要在if让viewController成功找到它的过程中定义一个标识符,工作代码如下:

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    if let viewController = storyboard.instantiateViewController(withIdentifier: "TabBarController") as? TabBarController {
        viewController.coreDataManager = self.coreDataManager
        window?.rootViewController = viewController
© www.soinside.com 2019 - 2024. All rights reserved.