gpt4 book ai didi

ios - 如何初始化一个 Nib 为 Storyboard 的 UIViewController

转载 作者:行者123 更新时间:2023-11-30 13:07:00 36 4
gpt4 key购买 nike

我有以下UIViewController:

class ViewController: UIViewController{

var dayDatasource : DayDatasource;

init(){
self.dayDatasource = DayDatasource();
super.init(nibName:nil, bundle: nil);
}

required init?(coder aDecoder: NSCoder) {
self.dayDatasource = DayDatasource();
super.init(nibName:nil, bundle: nil);
}

override func viewDidLoad() {
super.viewDidLoad();
}
}

现在,因为我声明了 dayDatasource 属性,所以 swift 强制我创建 init 方法。当我创建 init 方法时,它会提示我需要为 UIViewController 调用指定的 init 方法。经过谷歌搜索后,显然指定的`init方法是:

super.init(nibName:nil, bundle: nil);

但是,当我使用它时,我会看到一个后屏幕。如果我尝试以下操作:

super.init(nibName:"ViewController", bundle: NSBundle.mainBundle());

我收到以下错误:

Could not load NIB in bundle: 'NSBundle'

遇到这种情况我该怎么办?

最佳答案

如果您使用 Storyboard Segues 进行导航,则应将 dayDatasource 设为可选或使用 ?! 强制展开可选。这将防止要求您创建未使用的 init 方法。

然后,在您要导航的 View Controller 中,覆盖 func prepare(for segue: UIStoryboardSegue, sender: Any?) 函数并设置 dayDatasource 变量。

另一方面,如果这是第一个显示的 View Controller ,或者您总是想要一个 dayDatasource 的新实例,只需在变量声明中创建该实例,自定义 init 将不再需要。

var dayDatasource = DayDatasource()

关于ios - 如何初始化一个 Nib 为 Storyboard 的 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39235499/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com