changer de vue sans segue

Bonjour,


je voulais faire apparaà®tre un UIViewController sans segue.


J'ai utilisé plusieurs codes semblables à  celui-ci. 


"let storyboard = UIStoryboard(name: "Main " ", bundle: nil)


let controller = storyboard.instantiateViewController(withIdentifier: " secondViewController")


self.present(controller, animated: true, completion: nil)"


Mais j'obtiens à  chaque fois une erreur lors de l'exécution du programme (et pas d'erreur signalée lors de la compilation)


Jean-Luc


 


Réponses

  • Quelle erreur obtiens-tu ?


  • Le programme s'arrête et toute une page s'ouvre qui commence ainsi (sans indication précise sauf "Thread 1: signal SIGABRT"


    A gauche le programme s'arrête sur "12 main"


     


    import UIKit


     


    @UIApplicationMain


    class AppDelegate: UIResponder, UIApplicationDelegate {


     


        var window: UIWindow?


    ..........

  • CéroceCéroce Membre, Modérateur

    Je suis presque sûr qu'il y a une exception de levée... vraiment rien dans la console (en bas à  droite) ?


  • Ah oui


    il y  a cela dans la console


     


    libc++abi.dylib: terminating with uncaught exception of type NSException


    (lldb)

  • Pourrais-tu donner la totalité de l'erreur ?


    En général, il y a en plus sur la NSException, avant ou après cette ligne.


  • Voilà  l'ensemble du texte :


     


     


    2017-01-23 14:41:28.105 essaiView[2914:733444] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Storyboard (<UIStoryboard: 0x60800007f540>) doesn't contain a view controller with identifier 'secondViewController''


    *** First throw call stack:


    (


    0   CoreFoundation                      0x000000010b830d4b __exceptionPreprocess + 171


    1   libobjc.A.dylib                     0x0000000108c2f21e objc_exception_throw + 48


    2   UIKit                               0x00000001098cc08f -[UIStoryboard instantiateInitialViewController] + 0


    3   essaiView                           0x000000010864f2b9 _TFC9essaiView14ViewController9btnActionfCSo8UIButtonT_ + 217


    4   essaiView                           0x000000010864f39a _TToFC9essaiView14ViewController9btnActionfCSo8UIButtonT_ + 58


    5   UIKit                               0x00000001091008bc -[UIApplication sendAction:to:from:forEvent:] + 83


    6   UIKit                               0x0000000109286c38 -[UIControl sendAction:to:forEvent:] + 67


    7   UIKit                               0x0000000109286f51 -[UIControl _sendActionsForEvents:withEvent:] + 444


    8   UIKit                               0x0000000109285e4d -[UIControl touchesEnded:withEvent:] + 668


    9   UIKit                               0x000000010916e545 -[UIWindow _sendTouchesForEvent:] + 2747


    10  UIKit                               0x000000010916fc33 -[UIWindow sendEvent:] + 4011


    11  UIKit                               0x000000010911c9ab -[UIApplication sendEvent:] + 371


    12  UIKit                               0x000000010990972d __dispatchPreprocessedEventFromEventQueue + 3248


    13  UIKit                               0x0000000109902463 __handleEventQueue + 4879


    14  CoreFoundation                      0x000000010b7d5761 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17


    15  CoreFoundation                      0x000000010b7ba98c __CFRunLoopDoSources0 + 556


    16  CoreFoundation                      0x000000010b7b9e76 __CFRunLoopRun + 918


    17  CoreFoundation                      0x000000010b7b9884 CFRunLoopRunSpecific + 420


    18  GraphicsServices                    0x000000010d76aa6f GSEventRunModal + 161


    19  UIKit                               0x00000001090fec68 UIApplicationMain + 159


    20  essaiView                           0x0000000108650a1f main + 111


    21  libdyld.dylib                       0x000000010c7e068d start + 1


    22  ???                                 0x0000000000000001 0x0 + 1


    )


    libc++abi.dylib: terminating with uncaught exception of type NSException


    (lldb)



  • Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Storyboard (<UIStoryboard: 0x60800007f540>) doesn't contain a view controller with identifier 'secondViewController''

    Ton code :



    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "secondViewController")

    Tu appelles un UIViewController via son identifier secondViewController dans Main.storyboard. Sauf qu'il n'y en a pas de répertorié ainsi.


    Ouvre Main.storyboard, trouve celui que tu penses être secondViewController, et modifie son identifier (cf là ).

  • Mais il me semble l'avoir nommé


    ci dessous une capture d'écran 


    je ne vois pas trop où est l'erreur.




  • "Storyboard ID", avec "ID" signifiant Identifier est vide das ton cas.


    Ce que tu as fait, c'est mettre sa classe. Mais tu peux avoir plusieurs UIViewController avec la même classe, mais pour les retrouver, il faut un identifiant.


     


    Note : Il est recommandé de nommer les classes en commençant par une majuscule. ;)


  • D'accord  c'est bon


    Merci pour ton aide


    Jean-Luc


  • Je te redonne ton image, en y ajoutant un petit détail.


     


    Au fait, quand tu envoie des copies d'écran, ne le fait pas au format Tiff, c'est gourmand en mémoire et en bande passante. La même image en jpeg (qualité moyenne) est 3x moins volumineuse.


     


     


  • C'est noté


    merci


Connectez-vous ou Inscrivez-vous pour répondre.