0

我在这里遇到了一个非常奇怪的情况 - 调用该方法 UINAvigationController -> setViewControllers:animated:会导致应用程序崩溃。仅在 iOS 10.3.2 以及我在发布模式下构建应用程序时才会发生这种情况。

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

该问题仅在 iOS 10.3.2 和发布模式下出现。我已经在 10.3.2 的 iPhone 上检查了这一点,发布构建失败,但调试工作正常。此外,我在 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+ 开始使用,现在不推荐使用。没有黑客或其他可以破坏程序流程的东西。这是通常的使用方式。

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

4

2 回答 2

0

我发现这种行为是在将 RxCocoa 从 3.3.1 更新到 3.4.0 之后出现的。发生这种情况是因为以下变化DelegateProxyType.swift : extension ObservableType : func subscribeProxyDataSource

     return Disposables.create { [weak object] in
         subscription.dispose()
-       unregisterDelegate.dispose()
         object?.layoutIfNeeded()
+       unregisterDelegate.dispose()
     }

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

于 2017-05-26T11:33:01.930 回答
0

如果它不起作用,那么您可以尝试简单的方法,例如

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

let nextVC = storyboard?.instantiateViewController(withIdentifier:"ScrollViewController") as! ScrollViewController
self.navigationController?.pushViewController(nextVC, animated: true)
于 2017-05-26T08:07:17.407 回答