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
Connectez-vous ou Inscrivez-vous pour répondre.
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?
..........
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)
Ton code :
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