xib 파일에서보기를로드하려고합니다. 내가 뭘하기를 바라는 것은 나에게 꽤 단순 해 보이지만, 어떤 이유로 그것이 그것이 될 것이라고 생각했던 것보다 훨씬 어렵다. 스택 뷰에서 동일한 창에서 여러 번 재사용하려는 사용자 정의보기 (레이블, 단추 및 tableviews 포함)가 있습니다. 다음은 사용자 정의보기에 대한 내 코드입니다.보기로드 중 XIB 및 nil macOS 응용 프로그램을 받고
class PlatformView: NSView {
@IBOutlet var testLabel: NSTextField!
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
}
override func awakeFromNib() {
super.awakeFromNib()
self.testLabel.stringValue = "Init"
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// Drawing code here.
}
}
여기 내보기는 주보기 컨트롤러의로드가 수행 한 것입니다. 스택보기에서 두 개의 동일한보기가 필요하기 때문에 두 번하고 있습니다. 문제는 내가 오류가 발생했습니다. 이 줄은이며 많은 문제를 일으 킵니다. 이는 앱을 실행할 때만 때로 발생합니다. 그것은 꽤 무작위이고 나는 그것이 왜 일어나고 있는지 모른다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 아니면 내 코드에서 뭔가 잘못하고 있는거야?
var objectArray:NSArray?
guard let nib = NSNib(nibNamed: NSNib.Name(rawValue: "PlatformView"), bundle: nil) else {return}
if nib.instantiate(withOwner: self, topLevelObjects: &objectArray), let topLevelObjects = objectArray?.firstObject as? PlatformView {
self.platformStackView.addArrangedSubview(topLevelObjects)
self.firstPlatformView = topLevelObjects
}
if nib.instantiate(withOwner: self, topLevelObjects: &objectArray), let topLevelObjects = objectArray?.firstObject as? PlatformView {
self.platformStackView.addArrangedSubview(topLevelObjects)
self.secondPlatformView = topLevelObjects
}
FirstObject가 사용자가 찾고있는 PlatformView임을 보장 할 수 없습니다. 최상위 오브젝트가 여러 개있을 수 있으므로 원하는 PlatformView를 모두 확인해야합니다. 내 테스트에서 하위보기가있는 XIB 파일에서 하나의보기 만 있었지만 인터페이스 작성자는 무시해야하는 항목을 추가했습니다. 내 테스트에서 최상위 수준의 객체는 TestView와 NSApplication 인스턴스였습니다. 두 번째 항목 인 TestView를 얻기 위해 배열을 검사해야했습니다. –