Interface Builderを使用せずにmacOSアプリケーションを作成しようとしています。私のプロジェクトはビルドされ、実行されますが、私のプライマリView Controllerはビューをロードしていないようです。つまり、viewDidLoad()
メソッドは呼び出されません。私はXcode-beta 8.0 beta 6(8S201h)を使用しています。Swift 3でXIBを使用せずにNSViewControllerをプログラムで作成する
NSViewController
ためスウィフト3文書にこれはview
プロパティについてこう述べています。
あなたがそれにアクセスすると、このプロパティの値が設定されていない場合、ビューコントローラが
loadView()
メソッドを呼び出します。このメソッドは、View ControllerのnibName
とnibBundle
プロパティで識別されるnibファイルからビューを設定します。ビューコントローラのビューを直接設定する場合は、ビューコントローラを作成した直後にこのプロパティの値を設定します。
そしてviewDidLoad
用:
プログラムで作成されたビューコントローラの場合は、この方法は
loadView()
方法が完了した直後に呼び出されます。
最後に、isViewLoaded
ため:
ビューコントローラは、そのビューの遅延ロードを採用:ビューコントローラはメモリにロードされた直後に、その
isViewLoaded
プロパティの値は、false
です。loadView()
メソッドが返された後で、システムがviewDidLoad()
メソッドを呼び出す直前に、値はtrue
に変わります。
したがって、ドキュメントによって、可能であると信じることができます。
.
├── main.swift
└── Classes
├── AppDelegate.swift
└── Controllers
└── PrimaryController.swift
main.swift
import Cocoa
let delegate = AppDelegate()
NSApplication.shared().delegate = delegate
NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)
AppDelegate.swift
import Cocoa
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
let pc = PrimaryController(nibName: nil, bundle: nil)!
print(pc.isViewLoaded)
pc.view = NSView()
print(pc.isViewLoaded)
}
}
:
私のプロジェクトでは、このようになります
PrimaryController.swift
import Cocoa
class PrimaryController: NSViewController {
override func loadView() {
print("PrimaryController.loadView")
}
override func viewDidLoad() {
super.viewDidLoad()
print("PrimaryController.viewDidLoad")
}
}
ビル、上記収率で、このコンソール出力プロジェクトを実行している:
false
true
、コントローラのビュー負荷であるが、loadView
とviewDidLoad
方法決して呼び出されません。
私には何が欠けていますか?