NSWindowController
にはテーブルがあり、データソースとして別のコントローラを使用し、NSTableView
の代理人を使用しています。この第2のコントローラは、NSWindowController
によって渡されるオブジェクトからの情報を表示します。そのコントローラーは、オブジェクトをAppDelegate
によってプロパティとして設定します。それは次のようになります。AppDelegate
でNSWindowControllerに変更されないオブジェクトを渡す正しい方法は何ですか?
class SomeWindowController: NSWindowController {
var relevantThing: Thing!
var someTableController: SomeTableController!
@IBOutlet weak var someTable: NSTableView!
override func windowDidLoad() {
someTableController = SomeTableController(thing: relevantThing)
someTable.dataSource = someTableController
someTable.delegate = someTableController
}
}
私はその後、
func applicationDidFinishLaunching(_ aNotification: Notification) {
relevantThing = Thing()
someWindowController = SomeWindowController()
someWindowController.relevantThing = relevantThing
someWindowController.showWindow(nil)
}
のようなものが、これは合理的なアプローチですか? SomeWindowController
で使用されている暗黙的にアンラップされたオプションが悪い形である可能性があります。またrelevantThing
は私の場合は変更できませんので、let
がもっと正しいと感じます。たぶんrelevantThing
を定数にしてイニシャライザで渡す必要がありますか?または、それはinit?(coder: NSCoder)
イニシャライザを壊すでしょうか?
スウィフトで正しいことを感じるように努力しているので、私は大変感謝しています。
ありがとうございました。あなたは私にストーリーボードをチェックするように確信しました。彼らは確かに前進しています。感謝します! –