我有一个UIPageController,其中包含两个subviewcontrollers。开始时,我试图在未授权用户的情况下从SubViewControllerOne到LoginViewController执行隔离。我在viewDidAppear中有一个问题,如下所示:
performSegue(withIdentifier: "authorizeSegue", sender: self);
这将导致失败的segue和警告
Warning: Attempt to present <Volley.LoginViewController: 0x7f98bd801e00> on <Volley.SubViewControllerOne: 0x7f98bd608400> whose view is not in the window hierarchy!
过去我已经成功地使用ViewControllers和TabBarViewControllers完成了此操作。
[当我将计时器包装在计时器中,或通过IBAction触发时,该计时器工作正常。我相信这与PageViewController有关。
class PageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate, UIScrollViewDelegate {
var subViewControllers = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
self.edgesForExtendedLayout = [];
// Do any additional setup after loading the view.
let subViewControllerOne = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SubViewControllerOne") as! SubViewControllerOne
let subViewControllerTwo = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SubViewControllerTwo") as! SubViewControllerTwo
subViewControllers = [yourPodcastViewController, appearancesViewController]
setViewControllers([subViewControllers[0]], direction: .forward, animated: true, completion: nil)
}
required init?(coder: NSCoder) {
super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
}
我认为,由于视图控制器的生命周期,您应该对viewWillApear
执行segue操作>
[Welp,在通过tableViews上的didSelect运行segue之前,我遇到过这个问题。解决方案是将其包装在主线程中。不知道为什么这是必要的,但是它解决了我的问题。