View Controller will sich nicht öffnen lassen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • View Controller will sich nicht öffnen lassen

    Hey Leute,

    ich versuche bei meiner App über einen Login ein anderen ViewController zu öffnen... In meinem anderen Code-Teil funktioniert das wunderbar z.B von der Registrierung wieder auf die Login Oberfläche zu gelangen.. Den selben Code habe ich benutzt und natürlich die Namen angepasst, sowie die zu übermittelnden Parameter raus genommen.. Nun erhalte ich folgende Fehlermeldung:

    Quellcode

    1. 2017-02-23 15:48:37.474747 DriveLikeRide[904:19501] [MC] Reading from private effective user settings.
    2. Error: nil
    3. Login Success)
    4. 2017-02-23 15:48:42.170 DriveLikeRide[904:19538] *** Assertion failure in -[UIKeyboardTaskQueue waitUntilAllTasksAreFinished], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/Keyboard/UIKeyboardTaskQueue.m:432
    5. 2017-02-23 15:48:42.189 DriveLikeRide[904:19538] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread.'
    6. *** First throw call stack:
    7. (
    8. 0 CoreFoundation 0x00000001053f7d4b __exceptionPreprocess + 171
    9. 1 libobjc.A.dylib 0x0000000104e5921e objc_exception_throw + 48
    10. 2 CoreFoundation 0x00000001053fbe42 +[NSException raise:format:arguments:] + 98
    11. 3 Foundation 0x00000001049ee66d -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
    12. 4 UIKit 0x0000000106a7fb65 -[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] + 165
    13. 5 UIKit 0x00000001061f0441 -[UIKeyboardImpl setDelegate:force:] + 1404
    14. 6 UIKit 0x0000000106610dde -[UIPeripheralHost(UIKitInternal) _reloadInputViewsForResponder:] + 981
    15. 7 UIKit 0x000000010661a5f8 -[UIPeripheralHost(UIKitInternal) _preserveInputViewsWithId:animated:reset:] + 498
    16. 8 UIKit 0x00000001060e2543 -[UIViewController _presentViewController:modalSourceViewController:presentationController:animationController:interactionController:completion:] + 1178
    17. 9 UIKit 0x00000001060e428e -[UIViewController _presentViewController:withAnimationController:completion:] + 4971
    18. 10 UIKit 0x00000001060e6f66 __62-[UIViewController presentViewController:animated:completion:]_block_invoke_2 + 70
    19. 11 UIKit 0x0000000105fe8239 +[UIView(Animation) performWithoutAnimation:] + 90
    20. 12 UIKit 0x00000001060e6efc __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 365
    21. 13 UIKit 0x00000001060e726b -[UIViewController _performCoordinatedPresentOrDismiss:animated:] + 530
    22. 14 UIKit 0x00000001060e6d51 -[UIViewController presentViewController:animated:completion:] + 179
    23. 15 DriveLikeRide 0x0000000104853981 _TFC13DriveLikeRide19loginViewController17loginSuccessfullyfT_T_ + 753
    24. 16 DriveLikeRide 0x000000010485301f _TFFC13DriveLikeRide19loginViewController11getUserDataFT_T_U_FTGSqV10Foundation4Data_GSqCSo11URLResponse_GSqPs5Error___T_ + 13727
    25. 17 DriveLikeRide 0x000000010484690b _TTRXFo_oGSqV10Foundation4Data_oGSqCSo11URLResponse_oGSqPs5Error____XFdCb_dGSqCSo6NSData_dGSqS1__dGSqCSo7NSError___ + 203
    26. 18 CFNetwork 0x0000000108677ccc __75-[__NSURLSessionLocal taskForClass:request:uploadFile:bodyData:completion:]_block_invoke + 19
    27. 19 CFNetwork 0x0000000108677578 __49-[__NSCFLocalSessionTask _task_onqueue_didFinish]_block_invoke + 308
    28. 20 Foundation 0x000000010495b9ad __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 7
    29. 21 Foundation 0x000000010495b68f -[NSBlockOperation main] + 101
    30. 22 Foundation 0x0000000104959d8c -[__NSOperationInternal _start:] + 672
    31. 23 Foundation 0x0000000104955ccf __NSOQSchedule_f + 201
    32. 24 libdispatch.dylib 0x00000001091bd0cd _dispatch_client_callout + 8
    33. 25 libdispatch.dylib 0x000000010919ae17 _dispatch_queue_serial_drain + 236
    34. 26 libdispatch.dylib 0x000000010919bb4b _dispatch_queue_invoke + 1073
    35. 27 libdispatch.dylib 0x000000010919e385 _dispatch_root_queue_drain + 720
    36. 28 libdispatch.dylib 0x000000010919e059 _dispatch_worker_thread3 + 123
    37. 29 libsystem_pthread.dylib 0x000000010956c712 _pthread_wqthread + 1299
    38. 30 libsystem_pthread.dylib 0x000000010956c1ed start_wqthread + 13
    39. )
    40. libc++abi.dylib: terminating with uncaught exception of type NSException
    Alles anzeigen




    Den View-Controller mit der Swift Datei userProfilViewController mit der ID: upVC rufe ich wie folgt auf:

    Quellcode

    1. let loginPageView = self.storyboard?.instantiateViewController(withIdentifier: "upVC") as! userProfilViewController
    2. self.present(loginPageView, animated: true, completion: nil)

    Ich versteh das ganze nicht so richtig.. In meiner register Datei, rufe ich das LoginStoryboard nämlich wie folgt auf (Dort klappt es):


    Quellcode

    1. let loginPageView = self.storyboard?.instantiateViewController(withIdentifier: "loginVC") as! loginViewController
    2. print("Username: " + self.userUsername)
    3. //loginPageView.username = self.userUsername
    4. loginPageView.userUsername = self.userUsername
    5. loginPageView.userPassword = self.userPassword
    6. self.present(loginPageView, animated: true, completion: nil)
  • Lenon schrieb:


    Quellcode

    1. 2017-02-23 15:48:42.189 DriveLikeRide[904:19538] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread.'
    Ich will jetzt echt nicht pingelig sein ... aber liest denn heutzutage [tm] keiner mehr Fehlermeldungen. Oben steht doch exakt das, was @MCDan übersetzt hat. Wenn meine App mit einer Exception abbricht, lese ich doch erst einmal, was auf der Konsole ausgegeben wird. Zugegeben, manchmal sind die Aussagen nicht sehr hilfreich, aber "... may only be called from the main thread" ist doch schon ein deutliches Wort.

    Bei mir entsteht der Eindruck, dass Selber-Denken aus der Mode kommt, dafür gibt es ja soziale Medien. Sorry, wenn das jetzt oberlehrerhaft rüber kommt, aber was war an der o. g. Meldung denn unklar? Oder hast Du sie überprüft und führst den Code nach der Log-Ausgabe "Login Success)" durchaus im Main-Thread aus? Dann solltest Du uns das mitteilen und den relevanten Code posten.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MCDan schrieb:

    Das Problem ist nicht der Code an sich, sondern dass dieser nicht im Main Thread ausgeführt wird.

    Wie/wann wird der Code zum Anzeigen des anderen ViewControllers aufgerufen?
    Ich führe erst mittels JSON und meines Backend´s eine Passwordüberprüfung durch. Wenn das Password korrekt ist, wir die Methode bzw. function loginSuccessfully() geöffnet.

    diese sieht wie folgt aus.

    Quellcode

    1. // Function loginSuccessfully
    2. func loginSuccessfully(){
    3. // Log Player in
    4. print("Login Success)")
    5. let loginPageView = self.storyboard?.instantiateViewController(withIdentifier: "upVC") as! userProfilViewController
    6. self.present(loginPageView, animated: true, completion: nil)
    7. }

    Hier ist nochmal der Aufruf der Methode:

    Quellcode

    1. if (self.userPassword == self.tfLoginPassword.text!){
    2. self.loginSuccessfully()
    3. }else{
    4. self.loginFailed()
    5. }
    Mein Problem ist nicht das Lesen der Fehlermeldungen, wie es scheinbar den Anschein erweckt, sondern mein Problem liegt überwiegend, an der Umstellung von Java nach Swift, da die algorithmischen-Strukturen durchaus Ähnlichkeit zeigen, sind dennoch unterschiede, die mich selbst manchmal überfordern bzw nachdenken lassen.

    MyMattes schrieb:

    Lenon schrieb:

    Quellcode

    1. 2017-02-23 15:48:42.189 DriveLikeRide[904:19538] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread.'
    Ich will jetzt echt nicht pingelig sein ... aber liest denn heutzutage [tm] keiner mehr Fehlermeldungen. Oben steht doch exakt das, was @MCDan übersetzt hat. Wenn meine App mit einer Exception abbricht, lese ich doch erst einmal, was auf der Konsole ausgegeben wird. Zugegeben, manchmal sind die Aussagen nicht sehr hilfreich, aber "... may only be called from the main thread" ist doch schon ein deutliches Wort.
    Bei mir entsteht der Eindruck, dass Selber-Denken aus der Mode kommt, dafür gibt es ja soziale Medien. Sorry, wenn das jetzt oberlehrerhaft rüber kommt, aber was war an der o. g. Meldung denn unklar? Oder hast Du sie überprüft und führst den Code nach der Log-Ausgabe "Login Success)" durchaus im Main-Thread aus? Dann solltest Du uns das mitteilen und den relevanten Code posten.

    Mattes

    Zu deinem Beitrag möchte ich anmerken, dass ich sehr wohl die Fehlermeldung durchgegangen bin. Wie ich oben bereits erwähnt habe, verwende ich denselben Code (selbstverständlich abgeändert mit den passenden Parametern). In dem Anderen Storyboard wird der Aufruf des anderen Storyboards ebenfalls in einer anderen Methode ausgeführt, welcher dem hier gezeigten-Code nahezu gleich ist (lediglich die Methodennamen) sind anders.

    Der Grund, warum ich mich hier an das Forum gewandt hab ist der, dass diese Fehlermeldung für mich irgendwie unschlüssig ist, da der Code an einer anderen Stelle auf die selbe Weise funktioniert.

    Mit: "Login Success)" habe ich Lediglich überprüft, ob die Methode überhaupt aufgerufen wird.
  • Wie gesagt liegt es nicht am Code, sondern nur an der Art, wie dieser ausgeführt wird. Aktuell geschieht dies nicht im Main Thread zu passieren, welches dann zu dem Problem mit der Exception führt. ;)

    Laut Stack Trace scheint der komplette Aufruf ja aus einer NSOperation heraus getriggert zu werden. Es ist eher unwahrscheinlich, dass diese im Main Thread läuft, von daher wird dein kompletter Code auch nicht im Main Thread ausgeführt.

    Verwendest Du ein Framework für die Kommunikation mit dem Backend?