I implemented the NSApplicationDelegate method func application(_ sender: NSApplication, openFile filename: String) -> Bool to get the name of the file that is double-clicked to launch my macOS app (Swift 4.x). However, it appears that this method is called after ViewController viewDidLoad() which is where all my initialization code takes place. Is there a way to get the file name in viewDidLoad() in the ViewController class so that I can utilize the file name directly in my initialization code?
Update:
I am now able to pass data from AppDelegate to ViewController based on the suggestion from this link for Swift 4.2:
So my question remains is how to get the file name either directly in ViewDidLoad() or be able to get the name throughapplication(_, sender: NSApplication, openFile filename: String) -> Bool and have it available to be passed into the ViewController when ViewDidLoad() is called.
Solved my problem. Instead of performing my initialization code in
ViewController, I implemented the code inAppDelegateapplicationDidFinishLaunchinginstead so that the initialization can be performed when the app is launched and before first event occurs. I believe this is more proper practice anyway forAppDelegateto handle app initialization. This code adjustment solves both the need to pass data betweenViewControllerandAppDelegate, as well as the issue thatapplication(_, sender: NSApplication, openFile filename: String) -> Boolis called afterViewDidLoad().