Nach dem Ausführen der Funktion
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Es gibt einen Absturz:
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
Dieses Projekt ist ein altes Projekt. Was kann ich tun, damit es mit Xcode 7 und iOS 9 erstellt und ausgeführt wird?
Antworten:
Aus Ihrer Fehlermeldung:
Wie alt ist dieses "alte" Projekt? Wenn es mehr als ein paar Jahre sind, haben Sie noch:
Sie sollten es stattdessen ersetzen durch:
quelle
Wenn Sie den rootViewController Ihres self.window bereits in Ihrem App-Delegaten festgelegt haben und diesen Fehler zur Laufzeit weiterhin erhalten, ist in Ihrer UIApplication wahrscheinlich mehr als ein Fenster vorhanden, dem möglicherweise kein rootViewController zugeordnet ist. Sie können Ihre App-Fenster durchlaufen und einen leeren viewController seinem rootViewController zuordnen, um den Fehler zu beheben, den Sie erhalten.
Hier ist ein Code, der die App-Fenster durchläuft und dem rootViewController einen leeren ViewController zuordnet, wenn ein Fenster fehlt.
Update: Anscheinend gibt es ein Fenster für die Statusleiste, das normalerweise dieses Problem verursacht. Der obige Code sollte diesen Fehler beheben.
quelle
XCODE 7 erfordert, dass alle Windows einen rootViewController haben. Sie können einfach verwenden:
Es funktioniert gut, wenn Sie nur UIWindow verwenden müssen (für einfache Beispiele aus Tutorials - vor Xcode 7)!
quelle
Es scheint, dass seit iOS 9.1 (?) Oder Xcode 7.1 alle
UIWindow
Instanzen, die während instanziiertapplication(_:didFinishLaunchingWithOptions:)
wurden, einenrootViewController
Satz benötigen, bevor diese Methode verlassen wird.Bisher war es ausreichend, dass nur das Hauptfenster
rootViewController
während dieser Methode einen Satz hatte. Jetzt muss jedeUIWindow
Instanz eine gültigerootViewController
Eigenschaft haben.Der Schuldige hier könnte Ihr eigener Code sein, wenn Sie
UIWindow
eine andere Bibliothek eines Drittanbieters verwenden, die versucht,UIWindow
während dieser Zeit eine neue Instanz zu initialisieren (z. B. Nachrichtenüberlagerungen in der Statusleiste usw.).HINWEIS : Der gleiche Fehler wird auch angezeigt, wenn Sie das nicht in
rootViewControler
Ihrem Hauptfenster festlegen oder wenn Ihr Storyboard nicht richtig eingerichtet ist. Erwähnen Sie dies als Randnotiz, da diese Fälle ziemlich offensichtlich und einfach zu beheben sind.quelle
Das hat mich auch heute gebissen und es hat mich ein paar Stunden gekostet, es zu reparieren: Meine App hat das Fenster in einer "MainWindow.xib", komplett mit Navigations-Controller und zugehörigem Root-View-Controller, die alle automatisch in der richtigen Reihenfolge instanziiert wurden , mit Xcode 6 und iOS8.
Unter iOS9 läuft diese App beim Herunterladen aus dem AppStore weiterhin einwandfrei, jedoch nicht, wenn sie neu mit Xcode 7 erstellt und unter iOS 9 ausgeführt wird. Zum Zeitpunkt, zu dem der App-Delegat seine applicationDidBecomeActive: -Methode ausführt, wird der Root-View-Controller jetzt nicht mehr geladen war früher! Dadurch hat der Root-View-Controller den Aufruf meines Wiederherstellungsstatuscodes verpasst.
Ich habe dies behoben, indem ich den Root-View-Controller selbst im Code instanziiert und seinen Status explizit aus viewDidLoad wiederhergestellt habe.
quelle
Sie sollten die rootviewcontroller-Eigenschaft jedes Fensters in Ihrer App festlegen
quelle
Ich habe ein älteres Projekt, das in iOS 8 funktioniert hat, aber nicht in iOS 9. Wenn Ihre Hauptschnittstelle auf MainWindow.xib eingestellt ist, aktualisieren Sie es auf ein Storyboard. Das hat es für mich behoben:
quelle
Stellen Sie einfach Ihren rootViewController auf navigationController ein, der Ihr UIViewController in der app-delegate.rb ist, wie mein Code unten. Ich bin neu in Ruby, hoffe aber, dass dies geholfen hat ...
quelle
Ich bin mit einer App auf dieses Problem gestoßen, die ich mehr oder weniger geerbt habe. Nachdem ich überprüft hatte, ob das Storyboard ordnungsgemäß als Hauptschnittstelle der Apps eingerichtet war und das Storyboard einen RootViewController hatte, kam es immer noch zum Absturz.
Was ich nach einigen weiteren Untersuchungen herausgefunden habe, dass der Absturz durch das Aufrufen einer Ansichtslogik (SVProgressHud) verursacht wurde
- (void)applicationDidBecomeActive:(UIApplication *)application
. Dies scheint ein neues Verhalten in Xcode7 zu sein, aber soweit ich das beurteilen kann, hat SVProgressHud auf den rootviewcontroller verwiesen, bevor er vom Storyboard festgelegt wurde. Durch die Aktualisierung von SVProgressHud auf 2.0 wurde der Fehler behoben.quelle
Swift 2-Lösung, die für mich funktioniert hat:
Fügen Sie den folgenden Code in AppDelegate -> didFinishLaunchingWithOptions ein
quelle