UINAvigationController - > setViewControllers导致崩溃

时间:2017-05-26 07:59:23

标签: ios swift uinavigationcontroller rx-swift rx-cocoa

我在这里遇到一个非常奇怪的情况 - 调用method UINAvigationController -> setViewControllers:animated:会导致应用崩溃。它只在iOS 10.3.2和我在发布模式下构建应用程序时很开心。

我收集了更多细节。希望他们能帮助理解会发生什么。

此问题仅出现在iOS 10.3.2和发布模式中。我在iPhone上用10.3.2检查了这个,发布版本失败但是调试工作正常。此外,我已经在iOS 10.3.2上从AppStore检查了以前版本的应用程序,也没关系。调试和发布版本在所有以前版本的iOS上都可以正常工作。

AppStore中的早期版本是使用旧版本的Xcode构建的,现在我正在使用最新的Xcode 8.3.2。我想这是系统问题,它与iOS和Xcode版本有关。

关于消息来源,它看起来像:

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    ...
    window = UIWindow(frame: UIScreen.main.bounds)
    ....
    let navigationController = UINavigationController(rootViewController: viewController)
    window.rootViewController = navigationController
    window.makeKeyAndVisible()
}

ViewController.swift

override func viewDidLoad() {
    super.viewDidLoad()
    ...
    continueButton.addTarget(self, action: #selector(navigateForward), for: .touchUpInside)
    ...
}

func navigateForward(sender: UIButton!) {
    let nextController = FinalBuilder.viewController()
    navigationController?.setViewControllers([nextController], animated: true)
}

我之前说过,除了一个:)之外,它在所有情况下都能正常工作。 UINAvigationController -> setViewControllers:animated:是标准的iOS方法,可从iOS 3.0+获得,现在不予弃用。没有任何黑客或其他东西可以破坏程序流程。这是使用它的常用方法。

P.S。没有调试日志或我可以提供的任何其他消息,因为应用程序只是从屏幕上消失而根本没有任何通知。

2 个答案:

答案 0 :(得分:0)

如果它不起作用,那么你可以像

一样轻松尝试

简单的创建视图控制器对象并传入导航

let nextVC = storyboard?.instantiateViewController(withIdentifier:"ScrollViewController") as! ScrollViewController
self.navigationController?.pushViewController(nextVC, animated: true)

答案 1 :(得分:0)

我发现在将RxCocoa从3.3.1更新到3.4.0之后出现了这种行为。这是因为FALSE中的以下更改:

DelegateProxyType.swift : extension ObservableType : func subscribeProxyDataSource

我已将报告发布到ReactiveX/RxSwift存储库。如果您有兴趣,可以查看那里的最终状态。