2017-05-26 2 views
0

Ich habe eine sehr seltsame Situation hier - Anruf der methodUINAvigationController -> setViewControllers:animated: verursacht einen Absturz der App. Es freut mich nur auf iOS 10.3.2 und wenn ich die App im Release-Modus erstelle.UINAvigationController -> setViewControllers verursacht einen Absturz

Ich habe mehr Details gesammelt. Ich hoffe, sie können helfen zu verstehen, was passiert.

Das Problem tritt nur unter iOS 10.3.2 und im Veröffentlichungsmodus auf. Ich habe dies auf dem iPhone mit 10.3.2 überprüft und Release Build schlägt fehl, aber Debug funktioniert OK. Darüber hinaus habe ich die vorherige Version der App aus AppStore auf iOS 10.3.2 überprüft und es ist auch OK. Debug- und Release-Builds funktionieren auf allen früheren Versionen von iOS einwandfrei.

Die vorherige Version im AppStore wurde mit einer älteren Version von Xcode erstellt, und jetzt verwende ich den neuesten Xcode 8.3.2. Ich nehme an, es handelt sich um ein Systemproblem, das mit iOS- und Xcode-Versionen zusammenhängt.

Quellen betrifft, so sieht es aus wie:

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

ich schon sagte, es in allen Fällen mit einer Ausnahme :) gut funktioniert. UINAvigationController -> setViewControllers:animated: ist die Standard-iOS-Methode, die ab iOS 3.0 verfügbar und nicht mehr veraltet ist. Es gibt keine Hacks oder etwas anderes, was den Programmablauf beschädigen kann. Und es ist üblich, es zu benutzen.

P.S. Es gibt kein Debug-Protokoll oder irgendeine andere Nachricht, die ich Ihnen zur Verfügung stellen kann, weil die App einfach vom Bildschirm ohne Benachrichtigung verschwindet.

+0

Können Sie die genaue Absturz Fehlermeldung einfügen? – user1046037

+0

Es gibt keine Fehlermeldung. Ich habe es in der Beschreibung erwähnt. – comrade

+0

Wie also haben Sie erfahren, dass 'setViewControllers' den Absturz verursacht hat? – user1046037

Antwort

0

Ich habe festgestellt, dass dieses Verhalten nach der Aktualisierung von RxCocoa erschien von 3,3 .1 bis 3.4.0. Es geschieht, weil die folgende Änderung in DelegateProxyType.swift : extension ObservableType : func subscribeProxyDataSource:

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

I Bericht ReactiveX/RxSwift Repository geschrieben habe. Sie können dort den Endzustand überprüfen, wenn Sie interessiert sind.

0

Wenn es nicht funktioniert, so dass Sie einfach Art und Weise wie

einfach creat-View-Controller-Objekt und übergeben Sie in der Navigation können versuchen

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