【问题标题】:App crash on pushViewController after popToViewControllerpopToViewController 后 pushViewController 上的应用程序崩溃
【发布时间】:2018-03-15 11:20:24
【问题描述】:

我试图搜索这个,但找不到任何完美的解决方案。 我的应用程序有自定义动画视图和两个侧边抽屉。我也有自定义导航控制器,它有滑动顶栏。从 appDelegate 我将第一个控制器设置为 rootViewController,然后推送 ViewController(即带有动画的 mainViewController)。 然后尝试推动第二个控制器。从第二个控制器,我可以在按钮 Click 上转到第三个控制器或 rootViewController。 当我使用 popToViewController 从 secondController 返回后尝试转到第二个 viewController 时,应用程序崩溃。

我将 appdelegate 中的 rootViewController 设置为:

let profileViewController = mainStoryboard.instantiateViewController(withIdentifier: "LoadingDataView") as! LoadingDataView
self.navigationController = SDNavigationController(rootViewController: profileViewController);
self.navigationController.navigationBar.isHidden=true;
self.window!.rootViewController =  self.navigationController
self.window!.makeKeyAndVisible()

将 ViewController(mainController) 推送为:

if( app.navigationController.viewControllers.count < 2){
    let profileViewController=mainStoryboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
    app.navigationController?.pushViewController(profileViewController, animated: true);
}else{
    let profileViewController=mainStoryboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
    app.navigationController?.pushViewController(profileViewController, animated: false);
    let emptyView = UIViewController();
    app.navigationController?.pushViewController(emptyView, animated: false);
    app.navigationController.popViewController(animated: true);
}

然后将第二个 viewController 推为:

let tutorialView=myStory.instantiateViewController(withIdentifier: "BookmarksDetails") as! BookmarksDetails;
self.navigationController!.pushViewController(tutorialView, animated: true);

从第二个 viewController 中返回:

let testController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController") as! ViewController
let appDelegate = UIApplication.shared.delegate as! AppDelegate
testController.isOpenLeftDrawer = true
appDelegate.window?.rootViewController = testController
self.navigationController?.popToRootViewController(animated: true)

当我尝试从 viewController(mainController) 转到 secondViewController 时,应用程序崩溃。

【问题讨论】:

  • “Pushing viewController(mainController)”中的最后一行没有意义。 app.navigationController 被包裹(?)在推送中,但不在弹出中。如果它确实是可选的,则不应编译。另外,最后一行,popping 是 push 的反面,你为什么 push 一个没有动画的空视图,然后立即用动画弹出堆栈。
  • 我必须创建一个空的 viewController 来同时为两个 viewController 设置动画。

标签: ios swift3 uinavigationcontroller pushviewcontroller poptoviewcontroller


【解决方案1】:

你为什么这样做 -

app.navigationController.popViewController(animated: true);

这里只push,不要使用pop ViewController代码。

【讨论】:

  • 试图推送 viewController 但它添加了过多的堆栈并在几分之一秒内显示黑屏。删除将 viewController 设置为 rootViewController 后,应用程序运行正常。
  • @sagarss 这就是您在let emptyView = UIViewController() 这一行中做错的事情。推送一个空的 viewController 会导致黑屏
  • 出于动画目的,我必须推送 emptyView。因为我正在创建 viewController 的两个对象。然后使用两者为屏幕制作幻灯片动画。
  • 感谢@Aditya Srivastava 的快速回复
  • @sagarss 如果您得到了解决方案,您可以将其标记为答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多