Presenting and passing data to a modal view controller without using prepare(for:sender:) method
Is it guaranteed that viewDidLoad() will finish before viewWillAppear() is called? Will an even a larger data set be available for rendering as PDF in viewWillAppear()?


Yes. It needs to be loaded before it will appear.


  Is it acceptable to present modally from the UINavigationController?


I think it is.


  Should I be subclassing the main UINavigationController and using its prepare(for:sender:) method (if this is even an option)?


It sounds a bit complicated. prepare(for:sender:) is not a very clean way to do transfer data to begin with and only useful when you use segues in a regular way. Why don't you create the ModalViewController in code, set the value and then push it through code instead?


  In the performSegue(withIdentifier:sender:) method, does the sender argument make any difference?


I used it in rare occasions to understand where the push was coming from.


  Is it preferable to use present() rather than a segue?


I think in your case yes.