Après avoir exécuté la fonction
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
il y a un crash:
Assertion failure in
-[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', `enter code here`reason: 'Application windows are expected to have a root view controller at the end of application launch'
*** First throw call stack:
(
0 CoreFoundation 0x0000000109377885 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000108df0df1 objc_exception_throw + 48
2 CoreFoundation 0x00000001093776ea +[NSException raise:format:arguments:] + 106
3 Foundation 0x0000000108a42bb1 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
4 UIKit 0x000000010760e350 -[UIApplication _runWithMainScene:transitionContext:completion:] + 2875
5 UIKit 0x000000010760b73f -[UIApplication workspaceDidEndTransaction:] + 188
6 FrontBoardServices 0x000000010b87fd7b FrontBoardServices + 163195
7 FrontBoardServices 0x000000010b880118 FrontBoardServices + 164120
8 CoreFoundation 0x00000001092a20f1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
9 CoreFoundation 0x0000000109297eac __CFRunLoopDoSources0 + 556
10 CoreFoundation 0x0000000109297363 __CFRunLoopRun + 867
11 CoreFoundation 0x0000000109296d78 CFRunLoopRunSpecific + 488
12 UIKit 0x000000010760b091 -[UIApplication _run] + 402
13 UIKit 0x000000010760f79b UIApplicationMain + 171
14 bbwc 0x00000001037a9998 main + 344
15 libdyld.dylib 0x000000010a45ca05 libdyld.dylib + 10757
16 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Ce projet est un ancien projet, que dois-je faire pour le faire construire et fonctionner avec Xcode 7 et iOS 9?
Réponses:
De votre message d'erreur:
Quel âge a ce "vieux" projet? Si c'est plus de quelques années, avez-vous toujours:
Vous devriez plutôt le remplacer par:
la source
Si vous avez déjà défini le rootViewController de votre self.window dans votre délégué d'application et que vous obtenez toujours cette erreur au moment de l'exécution, vous avez probablement plus d'une fenêtre dans votre UIApplication dont l'une peut ne pas avoir de rootViewController associé. Vous pouvez parcourir les fenêtres de votre application et associer un viewController vide à son rootViewController pour corriger l'erreur que vous obtenez.
Voici un code qui parcourt les fenêtres de l'application et associe un ViewController vide au rootViewController s'il manque une fenêtre.
Mise à jour: Apparemment, il existe une fenêtre dédiée à la barre d'état qui provoque généralement ce problème. Le code ci-dessus devrait corriger cette erreur.
la source
XCODE 7 nécessite que tous les Windows doivent avoir un rootViewController Vous pouvez utiliser easy:
Cela fonctionne bien si vous devez utiliser uniquement UIWindow (pour des exemples simples de tous les tutoriels - avant Xcode 7)!
la source
Il semble que depuis iOS 9.1 (?) Ou Xcode 7.1, tout
UIWindow
instancié pendantapplication(_:didFinishLaunchingWithOptions:)
doit avoir unrootViewController
ensemble avant de quitter cette méthode.Auparavant, il suffisait que seule la fenêtre principale ait un
rootViewController
ensemble pendant cette méthode. Désormais, touteUIWindow
instance doit avoir unerootViewController
propriété valide .Le coupable ici pourrait être votre propre code si vous utilisez
UIWindow
et également toute autre bibliothèque tierce qui tente d'initialiser une nouvelleUIWindow
instance pendant ce temps (comme les superpositions de messages de la barre d'état, etc.).REMARQUE : vous obtenez également la même erreur si vous ne définissez pas le
rootViewControler
sur votre fenêtre principale ou si votre storyboard n'est pas configuré correctement. Mentionner cela comme une note secondaire, car ces cas sont assez évidents et faciles à corriger.la source
Cela m'a mordu aujourd'hui aussi, et cela m'a coûté quelques heures pour le réparer: mon application a la fenêtre dans un "MainWindow.xib", avec le contrôleur de navigation et le contrôleur de vue racine associé, qui ont tous été automatiquement instanciés dans le bon ordre , avec Xcode 6 et iOS8.
Sur iOS9, cette application fonctionne toujours bien lorsqu'elle est téléchargée à partir de l'AppStore, mais pas lorsqu'elle est nouvellement construite avec Xcode 7 et exécutée sur iOS 9. Au moment où le délégué de l'application exécute son applicationDidBecomeActive: méthode, le contrôleur de vue racine n'est plus chargé, car il c'était avant! Cela a fait que le contrôleur de vue racine a raté l'appel à mon code d'état de restauration.
J'ai résolu cela en instanciant moi-même le contrôleur de vue racine, dans le code, et en restaurant son état à partir de viewDidLoad, explicitement.
la source
Vous devez définir la propriété rootviewcontroller de chaque fenêtre dans votre application
la source
J'ai un projet plus ancien qui fonctionnait sous iOS 8 mais pas sous iOS 9. Si votre interface principale est définie sur MainWindow.xib, mettez-la à jour en storyboard. Cela a résolu le problème pour moi:
la source
Réglez simplement votre rootViewController sur navigationController qui est votre UIViewController dans le fichier app-delegate.rb comme mon code ci-dessous. Je suis nouveau dans le rubis mais j'espère que cela a aidé ...
la source
J'ai rencontré ce problème avec une application dont j'ai plus ou moins hérité. Après avoir vérifié que le storyboard était correctement configuré en tant qu'interface principale de l'application et que le storyboard avait un RootViewController, je recevais toujours le crash.
Ce que j'ai découvert après une enquête plus approfondie que le crash était causé par l'appel d'une logique de vue (SVProgressHud)
- (void)applicationDidBecomeActive:(UIApplication *)application
. Cela semble être un nouveau comportement dans Xcode7 mais pour autant que je sache, SVProgressHud faisait référence au rootviewcontroller avant qu'il ne soit défini par le storyboard. Finalement, la mise à jour de SVProgressHud vers 2.0 a corrigé le bogue.la source
Solution Swift 2 qui a fonctionné pour moi:
Insérez le code ci-dessous dans AppDelegate -> didFinishLaunchingWithOptions
la source