Depois de executar a função
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
há um acidente:
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
Este projeto é um projeto antigo, o que devo fazer para torná-lo compilado e executado com Xcode 7 e iOS 9?
Respostas:
Da sua mensagem de erro:
Quantos anos tem esse projeto "antigo"? Se for mais do que alguns anos, você ainda tem:
Você deve substituí-lo por:
fonte
Se você já definiu o rootViewController de seu self.window em seu delegado de aplicativo e ainda está recebendo este erro em tempo de execução, então provavelmente você tem mais de uma janela em seu UIApplication, uma das quais pode não ter um rootViewController associado. Você pode percorrer as janelas do seu aplicativo e associar um viewController vazio a seu rootViewController para corrigir o erro que está obtendo.
Aqui está um código que percorre as janelas do aplicativo e associa um ViewController vazio ao rootViewController se uma janela estiver faltando.
Atualização: Aparentemente, há uma janela dedicada à barra de status que normalmente causa esse problema. O código acima deve corrigir esse erro.
fonte
O XCODE 7 requer que todo o Windows tenha um rootViewController. Você pode usar facilmente:
Está funcionando bem se você precisar usar apenas UIWindow (para exemplos fáceis de quaisquer Tutoriais - antes do Xcode 7)!
fonte
Parece que desde o iOS 9.1 (?) Ou Xcode 7.1, qualquer
UIWindow
instanciado duranteapplication(_:didFinishLaunchingWithOptions:)
precisa ter umrootViewController
conjunto antes de deixar esse método.Anteriormente, era suficiente que apenas a janela principal tivesse um
rootViewController
conjunto durante esse método. Agora, qualquerUIWindow
instância precisa ter umarootViewController
propriedade válida .O culpado aqui pode ser o seu próprio código se você usar
UIWindow
e também qualquer outra biblioteca de terceiros que tente inicializar uma novaUIWindow
instância durante esse tempo (como sobreposições de mensagens da barra de status, etc.).NOTA : Você também obterá o mesmo erro se não definir o
rootViewControler
na janela principal ou se o storyboard não estiver configurado corretamente. Mencionando isso como uma observação lateral, uma vez que esses casos são bastante óbvios e simples de corrigir.fonte
Isso também me incomodou hoje, e me custou algumas horas para corrigi-lo: meu aplicativo tem a janela em um "MainWindow.xib", completo com controlador de navegação e controlador de visualização raiz que o acompanha, que foram todos instanciados automaticamente na ordem adequada , com Xcode 6 e iOS8.
No iOS9, esse aplicativo ainda funciona bem quando baixado da AppStore, mas não quando recém-construído com o Xcode 7 e executado no iOS 9. No momento em que o delegado do aplicativo está executando seu método applicationDidBecomeActive: o controlador de visualização raiz não está carregado, pois costumava ser antes! Isso fez com que o controlador de visualização raiz perdesse a chamada para o meu código de estado de restauração.
Corrigi isso instanciando o controlador de visualização raiz sozinho, no código, e restaurando seu estado de viewDidLoad, explicitamente.
fonte
Você deve definir a propriedade rootviewcontroller de cada janela em seu aplicativo
fonte
Tenho um projeto mais antigo que funcionava no iOS 8, mas não no iOS 9. Se sua interface principal estiver definida como MainWindow.xib, atualize-o para um storyboard. Isso resolveu para mim:
fonte
Apenas configure seu rootViewController para navigationController que é seu UIViewController no app-delegate.rb como meu código abaixo. Sou novo em rubi, mas espero que tenha ajudado ...
fonte
Tive esse problema com um aplicativo que herdei mais ou menos. Depois de verificar se o storyboard estava configurado corretamente como a interface principal do aplicativo e se o storyboard tinha um RootViewController, ainda estava travando.
O que descobri depois de mais investigações é que o travamento estava sendo causado por alguma lógica de exibição (SVProgressHud) sendo chamada
- (void)applicationDidBecomeActive:(UIApplication *)application
. Este parece ser um novo comportamento no Xcode7, mas, pelo que posso dizer, SVProgressHud fazia referência ao rootviewcontroller antes de ser definido pelo storyboard. Por fim, a atualização do SVProgressHud para 2.0 corrigiu o bug.fonte
Solução Swift 2 que funcionou para mim:
Insira o código abaixo em AppDelegate -> didFinishLaunchingWithOptions
fonte