Asks the delegate to provide the specified view controller.
SDKs
- iOS 6.0+
- Mac Catalyst 13.0+
- tvOS 9.0+
Framework
- UIKit
Declaration
- (UIView Controller *)application:(UIApplication *)application viewControllerWithRestorationIdentifierPath:(NSArray<NSString *> *)identifierComponents coder:(NSCoder *)coder;
Parameters
application
Your singleton app object.
identifierComponents
An array of
NSString
objects corresponding to the restoration identifiers of the desired view controller and all of its ancestors in the view controller hierarchy. The last value in the array is the restoration identifier of the desired view controller. Earlier entries represent the restoration identifiers of its ancestors.coder
The keyed archiver containing the app’s saved state information.
Return Value
The view controller object to use or nil
if the app delegate does not supply this view controller. If this method returns nil
, UIKit tries to find the view controller implicitly using the available restoration path and storyboard information.
Discussion
During state restoration, when UIKit encounters a view controller without a restoration class, it calls this method to ask for the corresponding view controller object. Your implementation of this method should create (or find) the corresponding view controller object and return it. If your app delegate does not provide the view controller, return nil
.
You use the strings in the identifier
parameter to identify the view controller being requested. The view controllers in your app form a hierarchy. At the root of this hierarchy is the window’s root view controller, which itself may present or embed other view controllers. Those presented or embedded view controllers may themselves present and embed other view controllers. The result is a hierarchy of view controller relationships, with each presented or embedded view controller becoming a child of the view controller that presented or embedded it. The strings in the identifier
array identify the path through this hierarchy from the root view controller to the desired view controller.
It is not always necessary to create a new view controller object in your implementation of this method. You can also return an existing view controller object that was created by another means. For example, you would always return the existing view controllers loaded from your app’s main storyboard file rather than create new objects.
Your implementation of this method may use any data in the provided coder
to assist in the restoration process. However, you usually do not need to restore the entire state of the view controller at this point. During a later pass, view controllers that define a decode
method are normally given a chance to restore their state form the same coder object. Similarly, the app delegate itself has a application:
method that you can use to restore app-level state information.
Note
If you return an object whose class does not match the class of the originally preserved object, or whose class is not a direct subclass of the original, the restoration system does not call the decode
method of the view controller.