Ios 如何从AppDelegate实例化多个视图控制器?

Ios 如何从AppDelegate实例化多个视图控制器?,ios,swift,uiviewcontroller,initialization,appdelegate,Ios,Swift,Uiviewcontroller,Initialization,Appdelegate,有一个容器视图,其中包含3个视图控制器(V1、V2和V3)。我可以通过向左或向右滑动从A、B或C切换。A或B都包含自己的集合视图。如果我点击A或B内集合视图中的任何单元格,PlayerVC(上图中的名为Player^^)将启动,并开始使用AVPlayer播放视频 问题是:由于我使用的是通用链接,用户直接进入playerView播放视频,但当他们按下“完成”按钮时,应用程序崩溃。我认为问题在于视图控制器上的其余部分没有初始化?如何初始化容器视图和其他视图控制器?或者,如果这不是问题,请让我知道问题

有一个容器视图,其中包含3个视图控制器(V1、V2和V3)。我可以通过向左或向右滑动从A、B或C切换。A或B都包含自己的集合视图。如果我点击A或B内集合视图中的任何单元格,PlayerVC(上图中的名为Player^^)将启动,并开始使用AVPlayer播放视频

问题是:由于我使用的是通用链接,用户直接进入playerView播放视频,但当他们按下“完成”按钮时,应用程序崩溃。我认为问题在于视图控制器上的其余部分没有初始化?如何初始化容器视图和其他视图控制器?或者,如果这不是问题,请让我知道问题是什么

下面是带有一些示例代码的应用程序委托。如果可能,请提供代码帮助

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    if let pagingViewController = window?.rootViewController as? PagingViewController {
        pagingViewController.videoPlaybackManager = videoPlaybackManager
    }
    return true
}



    class AppDelegate: UIResponder, UIApplicationDelegate {
    // Other App Delegate methods.....

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {

        // 1) Make sure the passed `user activity` has expected characteristics.
        guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else {
            return false
        }

        // HELP: I need to get to `PlayerVC` from here?

        return true

        // If we can't do the above we default to opening the page in safari
    }
}
编辑-如何在PagingViewController(容器视图)中实例化3个VCs的附加代码


如果您正在处理
UIPageViewController
,要设置正确的子级
UIViewController
,您可以:

// In PagingViewController
func loadChildViewControllerFromUniversalLink(myParameter: Bool) {
    // The condition you need to satisfied in order to present
    // the correct child view controller
    if  myParameter { // is satisfied
        let universalLinkVc = MyChildViewController() // load your VC here
        let direction : UIPageViewControllerNavigationDirection = .forward // or .reverse, as you wish
        self.setViewControllers([universalLinkVc], direction: direction, animated: animated, completion: nil)
    }
}
然后在
AppDelegate
应用程序中(u应用程序:UIApplication,continue用户活动:NSUserActivity,restorationHandler:@escaping([Any]?)->Void)->Bool

myPagingViewControllerInstance.loadChildViewControllerFromUniversalLink(true)

您通常如何初始化容器VC?这不是在
didLaunchWithOptions
中吗?嘿,我只是在我的示例中添加了更多的代码来展示它是如何完成的。谢谢,ContainerVC实际上是通过故事板初始化的。你好,Felipe。我没有使用UIPageViewController,而是使用名为PagingViewController的VC,它充当V1、V2和V3的容器视图。然后我在那里实例化了所有3个Vc。请看一看我添加的附加代码,如果可能,请相应地修改您的代码。谢谢你的帮助!!
myPagingViewControllerInstance.loadChildViewControllerFromUniversalLink(true)