Eu recebo o seguinte erro no meu console:
Espera-se que os aplicativos tenham um controlador de visualização raiz no final do lançamento do aplicativo
Abaixo está o meu application:didFinishLaunchWithOptions
método:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set Background Color/Pattern
self.window.backgroundColor = [UIColor blackColor];
self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
//self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];
// Set StatusBar Color
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
// Add the tab bar controller's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
No Interface Builder, o UITabBarController
representante do é conectado ao Delegado do Aplicativo.
Alguém sabe como resolver esse problema?
ios
objective-c
ArtSabintsev
fonte
fonte
Respostas:
Eu tenho esse mesmo problema. Verifique seu main.m. O último argumento deve ser definido como o nome da classe que implementa o protocolo UIApplicationDelegate.
fonte
NSStringFromClass
. É assim que o Xcode agora cria o arquivo main.m. Por exemplo:#import "AppDelegate.h
e entãoint retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
self.window
é inicializado comoself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
Substituir no AppDelegate
para
fonte
addSubview
linha fazia parte do modelo de projeto em uma versão anterior do Xcode / iOS SDK. Se o aplicativo voltar por um longo caminho, talvez você o tenha, mesmo que não o tenha escrito.Eu tive o mesmo erro ao tentar alterar o primeiro controlador de exibição carregado
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
No começo, eu realmente não sabia de onde vinha o erro exatamente, então reduzi-o e descobri o que estava errado. Acontece que eu estava tentando alterar a exibição de uma exibição antes que ela realmente aparecesse na tela. A solução foi, portanto, mover esse código no viewcontroller que estava me causando problemas de
- (void)viewDidLoad
para
- (void)viewDidAppear:(BOOL)animated
e o erro parou de aparecer. Meu problema especificamente foi causado por fazer um
UIAlertView
show.No seu caso, sugiro que você verifique o código no controlador de exibição ativo tabBarController (como provavelmente é um problema nesse controlador de exibição). Se isso não funcionar, tente definir as configurações iniciais no arquivo nib em vez de no código - ou se você quiser fazê-lo no código, tente mover o código para o método apropriado do controlador de exibição ativo tabBarController.
Boa sorte!
fonte
viewDidLoad:
(sem adicionar um sinalizador), nem devo fazer isso. Independentemente disso, obrigado pela sugestão!viewDidLoad
para muitas coisas, configurando todas as coisas de primeira vez, como adicionar dados ao arquivoUITableView
. Não consigo movê-loviewDidAppear:
porque só quero disparar uma vez.Eu entendi isso ao iniciar com o modelo "Aplicativo vazio" e depois adicionar manualmente um XIB. Eu o resolvi definindo o nome principal da ponta, como sugerido por Sunny. A etapa que falta neste cenário é remover
de
Como ele substituirá a instância da sua janela criada no arquivo Xib. Isso pressupõe que você criou um ViewController e o conectou à sua janela e ao App Delegate no arquivo XIB também.
fonte
Isso aconteceu comigo. Resolvido editando o arquivo .plist. Especifique o nome da base do arquivo da ponta principal (deve ser MainWindow.xib). Espero que isso ajude.
fonte
Encontrei o mesmo problema recentemente, ao criar um projeto com o ios5 sdk. No começo, ele estava construindo e funcionando corretamente, mas depois disso o erro apareceu.
No meu caso, a solução foi bastante simples.
O que faltava era que, de alguma forma, a propriedade Main Interface na guia de resumo do destino do meu aplicativo fosse apagada. Então eu precisava configurá-lo novamente.
Se esse não for o ponto, e se o tabBarController ainda for nulo, você sempre poderá criar programaticamente sua janela e o controlador raiz. Como substituto, adicionei o seguinte código ao meu projeto
Isso funcionará apenas se a solução do sho também estiver implementada.
fonte
Atualizei para o iOS9 e comecei a receber esse erro do nada. Consegui corrigi-lo, mas adicionando o código abaixo para
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
fonte
Nenhuma das sugestões acima resolveu meu problema. O meu era este:
Adicionar:
depois de:
no meu appdelegate
fonte
fonte
makeKeyAndVisible
, não resolve o problema. SOMENTE isso resolveu o aviso para mim. OBRIGADO!Storyboard
tambémcomo adicionar um RootViewController para iOS5
se seu aplicativo não usava um RootViewController até agora, basta criar um;) pressionando File> New> New File; selecione o
UIViewController subclass
nome RootViewController , desmarque a interface With XIB para o usuário (supondo que você já tenha uma) e insira esse código em seu AppDelegate :: didFinishLaunchingWithOptionscom certeza - você precisa importar o RootViewController.h e criar a variável
Aqui está um bom artigo sobre o RootViewController e o AppDelegate,
fonte
Eu também tive esse erro, mas diferente de qualquer uma das respostas listadas anteriormente, foi porque eu descomentei o método 'loadView' no meu controlador recém-gerado (xcode 4.2, ios5).
Ele até me disse que o método era para criar a exibição programaticamente, mas eu a perdi porque parecia muito semelhante a outros métodos, como o viewDidLoad, que eu normalmente uso e não o peguei.
Para resolver, remova esse método se você não estiver criando programaticamente a hierarquia de visualizações, também conhecida como nib ou storyboard.
fonte
Eu também tenho esses problemas. Eu tenho meu projeto executado no xcode4.2.1. Eu li todos os comentários lá em cima, mas ninguém é legal para mim. depois de um tempo, acho que comentei um pedaço de código.
então eu o descomentei. está tudo bem para mim. Espero que isso ajude vocês.
fonte
Verifique se você tem essa função no seu representante de aplicativo.
Certifique-se de que didFinishLaunchingWithOptions retorne YES. Se você removeu a linha 'retornar SIM', isso causará o erro. Este erro pode ser especialmente comum com usuários de storyboard.
fonte
Sendo minha primeira visão
MenuViewController
, adicionei:no método App Delegate:
Isso funcionou.
fonte
Houve uma pequena alteração no iOS 5.0, exigindo que você tivesse um controlador de visualização raiz. Se o seu código se basear em códigos de amostra mais antigos, como GLES2Sample , nenhum controlador de exibição raiz foi criado nessas amostras de código.
Para corrigir (esse GLES2Sample, por exemplo),
applicationDidFinishLaunching
criei um controlador de visualização raiz e anexo meu glView a ele.Isso faz o aviso desaparecer e, de outra forma, não afeta seu aplicativo.
fonte
Tente conectar o IBOutlet do controlador da barra de guias à visualização raiz no Interface Builder em vez de
Mas, na verdade, eu nunca vi esse erro antes.
fonte
Resolvi o problema fazendo o seguinte (nenhuma das outras soluções acima ajudou):
No menu suspenso associado à "Interface principal", selecione outra entrada e selecione novamente "MainWindow" e depois recrie.
fonte
Me deparei com o mesmo problema, mas eu estava usando
storyboard
Atribuindo meu
storyboard
InitialViewController
à minha janelarootViewController
.No
e isso resolveu o problema.
fonte
Comecei a ter esse mesmo problema logo após atualizar para o Xcode 4.3, e somente ao iniciar um projeto do zero (ou seja, crie um projeto vazio, crie um UIViewController e, em seguida, crie um arquivo de ponta separado).
Depois de colocar TODAS as linhas que eu costumava e garantir que eu tinha as conexões corretas, continuei recebendo esse erro, e o arquivo de ponta que eu estava tentando carregar através do controlador de exibição (que foi definido como rootController) nunca foi exibido no simulador.
Eu criei um único modelo de visualização através do Xcode e o comparei com o meu código e, finalmente, encontrei o problema!
O Xcode 4.3 parece adicionar por padrão o método - (vazio) loadView; para a seção de implementação do controlador de exibição. Depois de ler atentamente os comentários, ficou claro qual era o problema. O comentário indicado para substituir o método loadView se estiver criando uma exibição programaticamente (e estou parafraseando), caso contrário, NÃO substituirá o loadView se estiver usando uma ponta. Não havia mais nada dentro desse método, então, na verdade, eu estava substituindo o método (e não fazendo nada) enquanto usava um arquivo de ponta, que dava o erro.
A SOLUÇÃO foi remover completamente o método loadView da seção de implementação ou chamar o método pai adicionando [super loadView].
Removê-lo seria melhor se o uso de um arquivo NIB como adição de qualquer outro código o substituísse.
fonte
Eu tive essa mesma mensagem de erro no log. Eu tinha um UIAlertView pop-up no aplicativo: didFinishLaunchingWithOptions. Eu o resolvi atrasando a chamada para o alertView para permitir tempo para o controlador de exibição raiz concluir o carregamento.
No aplicativo: didFinishLaunchingWithOptions:
que chama após 1 segundo:
fonte
Eu tive o mesmo problema. Se você estiver criando um aplicativo baseado em janela "do zero" como eu, precisará fazer o seguinte: (observe, estas são as etapas para o Xcode 4.2).
0. Verifique se o delegado do aplicativo está em conformidade com o protocolo UIApplicationDelegate.
Por exemplo, suponha que nosso representante se chame MyAppDelegate. No MyAppDelegate.h, devemos ter algo como isto:
1. Especifique o delegado do aplicativo em main.m
Por exemplo,
2. Crie um arquivo de interface da janela principal.
Para fazer isso, clique com o botão direito do mouse no seu projeto e escolha Novo arquivo. A partir daí, escolha Janela na seção iOS -> Interface do usuário.
Depois de adicionar o arquivo ao seu projeto, vá para o resumo do projeto (clique com o botão esquerdo no projeto; clique no resumo.) Em Informações de implantação do iPhone / iPod (e na seção correspondente do iPad, se desejar) e selecione seu novo arquivo de interface na seção " Interface principal "caixa de combinação.
3. Conecte tudo no editor de interface
Selecione seu arquivo de interface na lista de arquivos para abrir o editor de interface.
Verifique se o painel Utilitários está aberto.
Adicione um novo objeto arrastando um objeto da lista Objetos no painel Utilitários para o espaço acima abaixo do objeto Janela. Selecione o objeto Clique no inspetor de identidade no painel Utilitários. Altere a classe para o delegado do aplicativo (MyAppDelegate, neste exemplo).
Exiba o inspetor de conexões para MyAppDelegate. Conecte a saída da janela à Janela que já existe no arquivo de interface.
Clique no proprietário do arquivo à esquerda e, em seguida, clique no inspetor de identidade no painel Utilitários. Mude a classe para
UIApplication
Exiba o inspetor de conexões do proprietário do arquivo. Conecte a tomada delegada ao objeto MyAppDelegate.
4. Finalmente, e muito importante, clique no objeto Window no arquivo de interface. Abra o inspetor de atributos. Verifique se "Visível na inicialização" está marcado.
Era tudo o que eu precisava fazer para que funcionasse para mim. Boa sorte!
fonte
Se você usar MTStatusBarOverlay, receberá esse erro.
MTStatusBarOverlay cria uma janela adicional ([[UIApplication sharedApplication] windows)) que não possui um controlador raiz.
Isso não parece causar um problema.
fonte
Recebi o mesmo erro depois de substituir minha interface do usuário por um Storyboard, usando o XCode 4.6.3 e o iOS 6.1
Resolvido limpando todo o código de didFinishLaucnhingWithOptions no AppDelegate
fonte
OrdoDei deu uma resposta correta e valiosa. Estou adicionando esta resposta apenas para dar um exemplo de um
didFinishLaunchingWithOptions
método que usa a resposta dele e também leva em consideração os comentários dos outros sobre o Navigation Controller.fonte
Isso ocorreu para mim porque, inadvertidamente, comentei:
de
fonte
Consegui definir o controlador de exibição inicial na tela de resumo do xcode.
Clique no nome mais alto do projeto no gerenciador de arquivos à esquerda (ele deve ter um pequeno ícone de planta). Na coluna central, clique no nome do seu projeto em 'TARGETS' (ele deve ter um pequeno ícone de lápis 'A' ao lado). Procure em 'Informações de implantação do iPhone / iPod' e procure por 'Interface principal'. Você deve poder selecionar uma opção no menu suspenso.
fonte
Além da resposta "sho", isso está correto (o quarto parâmetro de UIApplicationMain deve ser o nome do controlador principal), adiciono alguns comentários.
Recentemente, mudei o 'modelo' de um aplicativo meu usando o MainWindow.xib para construir uma janela programaticamente. O aplicativo usou um modelo mais antigo que criou essa MainWindow automaticamente. Como eu queria oferecer suporte a uma visualização de controlador diferente do XIB para iPhone 5, é mais fácil escolher o XIB certo programaticamente quando o App Delegate é criado. Também removi o MainWindow.xib do projeto.
O problema foi que eu esqueci de preencher o quarto parâmetro no UIApplication main e ESQUECI DE REMOVER o MainWindow da "Interface principal" no Resumo do projeto.
Isso causou um GRANDE problema: gerou o aviso inofensivo "Espera-se que os aplicativos ..." nos dispositivos de desenvolvimento, mas quando foi para a App Store, ele quebrou nos telefones dos consumidores, travando porque o MainWindow não estava mais no pacote! Eu tive que solicitar uma revisão acelerada para a correção de bug.
Outro sintoma é que, às vezes, um bloco branco, como um UIView em branco, aparecia às vezes quando as configurações eram alteradas e o aplicativo era colocado em primeiro plano. No iPhone 5, ficou claro que era um bloco de 320x480. Talvez o MainWindow ausente estivesse sendo criado no modo de desenvolvimento, usando o tamanho antigo. Acabei de encontrar esse bug quando os primeiros relatórios do acidente chegaram à caixa de entrada.
Instalar o aplicativo da App Store em vez do XCode mostrou que o aplicativo realmente travou, e o problema da MainWindow se revelou no log, para que eu pudesse ver que não era uma combinação especial de dispositivos + versões do IOS.
fonte
Para adicionar à resposta de Mike Flynn, desde a atualização para o Xcode 7 e a execução do meu aplicativo em um dispositivo iOS 9, adicionei isso ao meu
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
fonte
Esse problema ocorre quando você não possui o Interface Builder configurado corretamente.
Verifique se a janela e as saídas do viewController do App Delegate estão conectadas:
No MainWindow.xib, mantenha o controle, clique em App Delegate e arraste para o objeto Window. Selecione a janela. Mantenha o controle e selecione o delegado do aplicativo novamente, arraste para o controlador de exibição raiz e selecione viewController.
fonte
Este erro também aparece quando o proprietário do arquivo MainWindow.xib está definido incorretamente.
O proprietário do arquivo é UIApplication
-> objeto inserido da classe delegada do aplicativo com a saída de janela conectada à janela
fonte