SwiftUI:NSViewControllerRepresentable 中的 NSPageController 崩溃
SwiftUI: NSPageController in NSViewControllerRepresentable crashes
我正在尝试以编程方式将 NSPageController
放入 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)
}
}
到目前为止,我尝试创建在 NSPageController
上调用 super.init(nibName: nil, bundle: nil)
的自定义初始化程序,但这也没有用。我也试过覆盖'loadView',但我还是没成功。
我确实发现应用程序在 makeNSViewController
调用中的 NSPageController
的 loadView
调用中崩溃。
默认情况下,NSViewControllers 的便捷初始化程序会尝试从 nib 加载它们的视图。
您需要覆盖 loadView 并实际向页面控制器提供视图
override func loadView() {
self.view = NSView() // the view being controlled
}
我正在尝试以编程方式将 NSPageController
放入 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)
}
}
到目前为止,我尝试创建在 NSPageController
上调用 super.init(nibName: nil, bundle: nil)
的自定义初始化程序,但这也没有用。我也试过覆盖'loadView',但我还是没成功。
我确实发现应用程序在 makeNSViewController
调用中的 NSPageController
的 loadView
调用中崩溃。
默认情况下,NSViewControllers 的便捷初始化程序会尝试从 nib 加载它们的视图。
您需要覆盖 loadView 并实际向页面控制器提供视图
override func loadView() {
self.view = NSView() // the view being controlled
}