2017-05-26 5 views
0

J'ai une situation très étrange ici - appel du methodUINAvigationController -> setViewControllers:animated: provoque un plantage de l'application. Ca ne se passe que sur iOS 10.3.2 et quand je construis l'application en mode release.UINAvigationController -> setViewControllers provoque un plantage

J'ai recueilli plus de détails. J'espère qu'ils peuvent aider à comprendre ce qui se passe.

La question apparaît sur iOS 10.3.2 et en mode de sortie uniquement. J'ai vérifié ceci sur l'iPhone avec 10.3.2 et la construction de version échoue mais le débogage fonctionne bien. De plus, j'ai vérifié la version précédente de l'application depuis AppStore sur iOS 10.3.2 et c'est OK aussi. Les versions de débogage et de publication fonctionnent correctement sur toutes les versions précédentes d'iOS.

La version précédente a été construite avec AppStore ancienne version de Xcode, et maintenant je suis en utilisant les dernières Xcode 8.3.2. Je suppose que c'est le problème du système, qui est lié aux versions iOS et Xcode.

En ce qui concerne les sources, il ressemble à:

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) 
} 

je l'ai dit, il fonctionne très bien dans tous les cas sauf un :). UINAvigationController -> setViewControllers:animated: est méthode standard iOS, disponible à partir de iOS 3.0+ et non dépréciée maintenant. Il n'y a pas de hacks ou quelque chose d'autre qui peut corrompre le flux du programme. Et c'est une façon habituelle de l'utiliser.

P.S. Il n'y a pas de journal de débogage ou tout autre message que je peux vous fournir parce que l'application disparaît de l'écran sans aucune notification.

+0

Pouvez-vous coller le message d'erreur crash exact? – user1046037

+0

Il n'y a pas de message d'erreur. Je l'ai mentionné dans la description. – comrade

+0

Alors comment avez-vous de savoir que 'setViewControllers' a causé l'accident? – user1046037

Répondre

0

J'ai trouvé que ce comportement est apparu après la mise à jour de RxCocoa de 3,3 .1 à 3.4.0. Il se produit en raison de la modification suivante dans DelegateProxyType.swift : extension ObservableType : func subscribeProxyDataSource:

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

J'ai posté rapport à ReactiveX/RxSwift référentiel. Vous pouvez vérifier l'état final là-bas, si vous êtes intéressé.

0

si son fonctionne pas, afin que vous puissiez essayer manière simple comme

objet simple contrôleur de vue creat et passer la navigation

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