appkit - NSViewController 带/不带 nib
问题描述
我正在向NSViewController
图书馆添加一个子类,并试图吃掉我的蛋糕。
MyViewController() (或 init() )的默认实现抛出异常
如果它无法在笔尖或情节提要中找到自己。为了克服这个问题,我必须override loadView()
在代码中创建和分配一个视图。我真正想做的是两者,在代码中创建一个视图,但只有在超级实现在 nib 中找不到一个的情况下才运行该代码。我试过一个
do {
super.loadView()
}
catch{
//viewCreatingCode
}
但不幸的是 loadView 没有被标记为 throws 所以 catch 不起作用。有任何想法吗?
解决方案
好的,这就是您要执行的操作。
NSViewController
具有您要检查的三个属性:nibBundle
、nibName
和storyboard
。所有这三个属性都是可选的,它们是在loadView
调用之前设置的。
loadView
检查是否设置了这些属性的默认实现。如果是这样,它将从该笔尖或情节提要初始化视图。否则,它会创建一个空的NSView
.
在您的实现中loadView
,您也需要检查这些值。如果nibName
和storyboard
are both nil
,您可以创建和设置您想要的视图。
override func loadView() {
guard nibName == nil, storyboard == nil else {
super.loadView()
return
}
view = MyCustomView()
}
推荐阅读
- gem5 - 在 Gem5 中使用倾斜的关联缓存
- apache-spark - 关于windows.Partition函数中rangebetween的使用
- ios - 视图扩展 (SwiftUI) 在调试构建中有效,但在发布构建中失败
- formik - 如何在 Formik 中获取更改的值?
- c++ - 当我尝试深度复制`unique_ptr`s时出现段错误
- typeorm - TypeORM QueryBuilder 使用外键约束插入表
- javascript - 需要帮助调用 text_a(),它最初在 foo() 中声明,在被调用函数 foo() 内
- javascript - 处理依赖反应查询
- regex - Ruby gem or regex to extract IPs from 0-255?
- typescript - 带有“扩展”的 Typeguard 不会像预期的那样缩小类型