2017-02-25 57 views
0

我想用我的应用程序的init VC初始化我的核心数据堆栈。为了做到这一点,我希望将我创建的核心数据管理器加载到第一个VC中。在App Delegate中设置Init 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没有属性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") 
    } 
+0

你确定你的故事板文件被称为RoutineController.storyboard? – lukwuerz

+0

没有VC被称为RoutineController,故事板是主要的,更新了一个似乎现在可以工作的OP,如果任何人都可以验证这是准确的... – jwarris91

回答

0

的解决方案是,你需要定义一个标识符,如果让的viewController找到它成功,工作代码为如下:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    if let viewController = storyboard.instantiateViewController(withIdentifier: "TabBarController") as? TabBarController { 
     viewController.coreDataManager = self.coreDataManager 
     window?.rootViewController = viewController 
1

这是你的问题:

as? ViewController 

应该

as! UIViewController 

或者这也应该工作:

as! RoutineController 
+0

我认为这个但它然后抛出“从'UIViewController'Downcast?到'UIViewController'只解开可选项;你的意思是使用'!'?“ – jwarris91

+0

是的,我认为直接铸造它作为控制器名称可能是解决方案,生病做进一步测试 – jwarris91

+0

太棒了!祝你好运。 – Mozahler

0

在故事板中选择RoutineController并设置storyboar d ID

enter image description here

然后用故事板ID在这里:

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

感谢这似乎是有道理的,并没有触发一个错误,但在{}之后的代码作为?例程控制器未运行,更新了OP并且打印命令没有运行 – jwarris91

相关问题