In my first post about state restoration on iOS 6 (or newer), I explained how you should use
restorationIdentifier for the view controllers that are part of the on-load UI (and thus created in AppDelegate) and
restorationClass to create and return controllers which are deeper in navigation stack.
If you do that, UIKit will take care of restoring the
UINavigationController and you just deal with view controllers beyond the
topViewController inside the navigation controller hierarchy.
That’s still a good general guideline. However, as is usually the case, there are exceptions.