在 App Delegate 中设置 Init VC?
Setting Init VC in App Delegate?
我正在尝试使用我的应用程序 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
}
错误很简单:
Use of undeclared type 'ViewController'
但是,如果我删除 'as? ViewController',我会在以下行中收到错误消息,即 viewController 没有 属性 coreDataManager。
我需要在发送到的视图控制器的 viewdidload 中定义某种委托吗?
EDIT 修改了我的代码以更正故事板 ID,但是 {} 中的代码似乎没有执行,由于 if let 失败,我得到了我写的打印错误,所以这仍然不是设置 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")
}
这是你的问题:
as? ViewController
应该是
as! UIViewController
或者这也应该有效:
as! RoutineController
Select 故事板中的 RoutineController 并设置故事板 ID
然后在此处使用 Storyboard ID:
if let viewController = storyboard.instantiateViewController(withIdentifier: "<storyboardID>") as? RoutineController {
解决方法是需要在if let viewController中定义一个标识符才能成功找到,工作代码如下:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if let viewController = storyboard.instantiateViewController(withIdentifier: "TabBarController") as? TabBarController {
viewController.coreDataManager = self.coreDataManager
window?.rootViewController = viewController
我正在尝试使用我的应用程序 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
}
错误很简单:
Use of undeclared type 'ViewController'
但是,如果我删除 'as? ViewController',我会在以下行中收到错误消息,即 viewController 没有 属性 coreDataManager。
我需要在发送到的视图控制器的 viewdidload 中定义某种委托吗?
EDIT 修改了我的代码以更正故事板 ID,但是 {} 中的代码似乎没有执行,由于 if let 失败,我得到了我写的打印错误,所以这仍然不是设置 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")
}
这是你的问题:
as? ViewController
应该是
as! UIViewController
或者这也应该有效:
as! RoutineController
Select 故事板中的 RoutineController 并设置故事板 ID
然后在此处使用 Storyboard ID:
if let viewController = storyboard.instantiateViewController(withIdentifier: "<storyboardID>") as? RoutineController {
解决方法是需要在if let viewController中定义一个标识符才能成功找到,工作代码如下:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if let viewController = storyboard.instantiateViewController(withIdentifier: "TabBarController") as? TabBarController {
viewController.coreDataManager = self.coreDataManager
window?.rootViewController = viewController