swift - SwiftUI:NSViewControllerRepresentable 中的 NSPageController 崩溃
问题描述
我试图以编程方式将 aNSPageController
放入 SwiftUI NSViewControllerRepresentable
,但是当应用程序运行时,它会因以下错误而崩溃:
-[NSNib _initWithNibNamed:bundle:options:] could not load the nibName: test.PageController in bundle (null).
这是我能想到的用于演示该问题的最小示例:
页面预览:
struct PageView: NSViewControllerRepresentable {
let data = ["green", "blue", "red"]
typealias NSViewControllerType = PageController
func makeNSViewController(context: Context) -> PageController {
let pageController = PageController()
pageController.arrangedObjects = data
pageController.delegate = pageController
return pageController
}
func updateNSViewController(_ nsViewController: PageController, context: Context) {
}
}
页面控制器:
class PageController: NSPageController, NSPageControllerDelegate {
func pageController(_ pageController: NSPageController, identifierFor object: Any) -> NSPageController.ObjectIdentifier {
return (object as? String) ?? "green"
}
func pageController(_ pageController: NSPageController, viewControllerForIdentifier identifier: NSPageController.ObjectIdentifier) -> NSViewController {
let rootView: Color
switch identifier {
case "green":
rootView = .green
case "red":
rootView = .red
default:
rootView = .blue
}
return NSHostingController(rootView: rootView)
}
}
到目前为止,我尝试创建调用super.init(nibName: nil, bundle: nil)
on 的自定义初始化程序NSPageController
,但这也不起作用。我也尝试过覆盖'loadView',但我仍然没有让它工作。
我确实发现应用程序在loadView
调用NSPageController
内部调用时崩溃了makeNSViewController
。
解决方案
NSViewControllers 的便利初始化器默认尝试从 nib 加载它们的视图。
您需要覆盖 loadView 并实际向页面控制器提供视图
override func loadView() {
self.view = NSView() // the view being controlled
}
推荐阅读
- image - 在 chart.js 中的条形图中添加图像
- svn - Tortoise SVN 像 Perforce 中的文件叠加
- boost - cmake undefined zlib 问题中的静态链接 boost
- r - 如何修复 rintrojs 模态在本地工作但在部署到 shinyapps.io 时失败
- reactjs - 如何解决 react js 给出的错误,例如 TypeError: render is not a function?
- azure - 如何将数据附加到现有的 Azure 数据湖文件中?
- asp.net - 为什么我的 ajaxCollapsiblePanel 不工作
- swift - 如何快速发送消息蓝牙设备?
- jquery - 如何在视口中触发 SVG 动画?
- c# - 带有查询字符串的 .aspx url 无法在没有 .aspx 的情况下重定向到 url - 我还想在新 url 上保留查询字符串