AppDelegateから複数のView Controllerをインスタンス化する方法は?
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
}
}
EDIT - あなたはUIViewController
することができます適切な子を設定するために、UIPageViewController
を扱っている場合は、私がPagingViewController内(コンテナビュー)
private func setupViewControllers() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
page1 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.feedViewController.rawValue) as! FeedViewController
page1.view.translatesAutoresizingMaskIntoConstraints = false
page1.delegate = self
scrollView.addSubview(page1.view)
addChildViewController(page1)
page1.didMove(toParentViewController: self)
// Inject dependency.
page1.videoPlaybackManager = videoPlaybackManager
page2 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.favoritesViewController.rawValue) as! FavoritesViewController
page2.view.translatesAutoresizingMaskIntoConstraints = false
page2.delegate = self
scrollView.addSubview(page2.view)
addChildViewController(page2)
page2.didMove(toParentViewController: self)
page3 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.settingsViewController.rawValue) as! SettingsViewController
page3.view.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(page3.view)
addChildViewController(page3)
page3.didMove(toParentViewController: self)
......
通常、コンテナVCをどのように初期化していますか?それは 'didLaunchWithOptions'にありませんか? – dmorrow
ちょっと、私の例にコードを追加しました。ありがとう – user7097242
実際には、ContainerVCはストーリーボードで初期化されています。 – user7097242