Im' एक SwiftUI NSViewControllerRepresentable
में प्रोग्रामेटिक रूप से NSPageController
डालने की कोशिश कर रहा है, लेकिन जब ऐप चलता है, तो यह निम्न त्रुटि के साथ क्रैश हो जाता है:
-[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)
को NSPageController
पर कॉल करते हैं, लेकिन वह भी काम नहीं किया। मैंने 'लोड व्यू' को ओवरराइट करने का भी प्रयास किया, लेकिन मुझे अभी भी यह काम नहीं मिला।
मैंने पाया कि makeNSViewController
कॉल के अंदर NSPageController
के loadView
कॉल में ऐप क्रैश हो जाता है।
1 उत्तर
डिफ़ॉल्ट रूप से NSViewControllers के लिए सुविधा प्रारंभकर्ता अपने विचारों को निब से लोड करने का प्रयास करते हैं।
आपको लोड व्यू को ओवरराइड करने और वास्तव में पेज कंट्रोलर को एक दृश्य प्रदान करने की आवश्यकता है
override func loadView() {
self.view = NSView() // the view being controlled
}