3

On macOS unlike iOS, it appears if you want to disable reopening documents at launch, you need to rely on the application delegate notifications vs the newer methods - with an options argument, like on iOS:

  • applicationWillFinishLaunching(_:), here you want to instantiate your sub-classed document controller
//  We need our own to reopen our "document" urls
_ = DocumentController.init()
  • applicationDidFinishLaunching(_:), here you want to inspect the supplied userInfo
if let info = note.userInfo{
    if let launchURL = info[NSApplication.launchIsDefaultUserInfoKey] as? String  {
        Swift.print("launchIsDefaultUserInfoKey: notif \(launchURL)")
        disableDocumentReOpening = launchURL.boolValue
    }
    if let notif = info[NSApplication.launchUserNotificationUserInfoKey] as? String {
        Swift.print("applicationDidFinishLaunching: notif \(notif)")
        disableDocumentReOpening = true
    }
}

so when my document controller is called to do the doc restores, it would see this flag within the app delegate: var disableDocumentReOpening = false.

func restoreWindow(withIdentifier identifier: NSUserInterfaceItemIdentifier, state: NSCoder, completionHandler: @escaping (NSWindow?, Error?) -> Void) {
    if (NSApp.delegate as! AppDelegate).disableDocumentReOpening {
    completionHandler(nil, NSError.init(domain: NSCocoaErrorDomain, code: NSUserCancelledError, userInfo: nil) )
    }
    else
    {
        NSDocumentController.restoreWindow(withIdentifier: identifier, state: state, completionHandler: completionHandler)
    }
}

but unfortunately, I have something wrong but what? Manually launching the app in debugger, it appears the document controller restore call is ahead of the app delegate's routine to inspect the userInfo.

I had read a SO post on this, showing an objective-c code snippet, but flag was local to the controller, but didn't understand how you could have a read/write class var - as I tried. Also didn't understand its use of a class function as doc says its an instance method, but trying that as well didn't work either.

What am I missing?

slashlos
  • 913
  • 9
  • 17

0 Answers0