UINavigationController -> setViewControllers вызывает сбой

У меня тут очень странная ситуация - вызов метода < /a> UINAvigationController -> setViewControllers:animated: вызывает сбой приложения. Это происходит только на iOS 10.3.2 и когда я создаю приложение в режиме выпуска.

Я собрал больше деталей. Надеюсь, они помогут понять, что происходит.

Проблема возникает только в iOS 10.3.2 и в режиме выпуска. Я проверил это на iPhone с 10.3.2, и сборка выпуска не удалась, но отладка работает нормально. Кроме того, я проверил предыдущую версию приложения из AppStore на iOS 10.3.2, и она тоже в порядке. Сборки отладки и выпуска отлично работают на всех предыдущих версиях 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. Нет журнала отладки или любого другого сообщения, которое я могу вам предоставить, потому что приложение просто исчезает с экрана без каких-либо уведомлений.


person comrade    schedule 26.05.2017    source источник
comment
Можете ли вы вставить точное сообщение об ошибке сбоя?   -  person user1046037    schedule 26.05.2017
comment
Сообщение об ошибке отсутствует. Я упомянул это в описании.   -  person comrade    schedule 26.05.2017
comment
Итак, как вы узнали, что setViewControllers вызвал сбой?   -  person user1046037    schedule 26.05.2017
comment
Потому что без этого звонка краха не будет :). Если вместо этого я использую метод pushViewController, он работает нормально. Во всяком случае, я понял, что было реальной причиной проблемы. Спасибо за ваши комментарии.   -  person comrade    schedule 26.05.2017


Ответы (2)


если это не работает, вы можете попробовать простой способ, например

простой объект контроллера создания представления и переход в навигацию

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

Я обнаружил, что такое поведение появилось после обновления 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. Вы можете проверить конечное состояние там, если вам интересно.

person comrade    schedule 26.05.2017