iOS 7 - Falha ao instanciar o controlador de visualização padrão


93

Estou usando o Xcode 5 em um aplicativo recém-criado e quando acabo de criá-lo, clico no botão Executar e, em seguida, o projeto é construído, mas não aparece no Simulador iOS e recebo a seguinte mensagem:

 Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - 
 perhaps the designated entry point is not set?

É claro que pesquisei sobre isso no Google e todos apontam que isso está acontecendo porque o XCode ainda não sabe qual view controller é o inicial. Mas o estranho é que eu criei o aplicativo como um aplicativo baseado em página (também tentei opções de aplicativo de visualização única e com guias) e o XCode já tinha definido um Storyboard para ele.

Além disso, quando vou para a opção de interface principal do projeto, o storyboard (denominado "Principal" pelo próprio Xcode) é definido e, no Storyboard, meu controlador de visualização é definido como "Controlador de visualização inicial"

insira a descrição da imagem aqui

O que está errado?


tente configurá-lo de forma
programática

@Ramshad Olá, sou meio que um novato no desenvolvimento de iOS. Como eu posso fazer isso?
rodrigoalvesvieira


2
Certifique-se de definir o controlador de visualização como o controlador de visualização inicial.
Sandeep

Como Kashif Ahmed apontou, você também precisa abrir seu arquivo Info.plist como código-fonte e editar a string <key> UISceneStoryboardFile </key> e fornecer lá o nome de seu novo storyboard.
bogdan

Respostas:


56

Então isso também aconteceu comigo também. Verifiquei 50 vezes e meu "Is Initial View Controller" foi verificado, acredite em mim. Aconteceu do nada. Então, como eu corrigi isso?

  1. Crie um novo Storyboard em seu projeto, nomeie-o como Main_iPhoneV2 (ou iPadV2 dependendo do seu estilo de storyboard original)
  2. Abra o storyboard quebrado, clique em qualquer lugar na área branca e pressione command-a e, em seguida, command-c (selecione tudo e copie)
  3. Abra seu novo storyboard e pressione command-v para colar exatamente a mesma configuração
  4. Vá para as configurações do projeto, altere sua "Interface principal" para o novo Main_iPhoneV2 (se for o seu iPad e você estiver escrevendo um aplicativo universal, você terá que editar o -Info.plist e procurar o valor "Arquivo de storyboard principal nome de base (iPad)
  5. Recompile e pare de puxar seus cabelos

3
encontrou o mesmo problema ao tentar as etapas listadas nas noções básicas do desenvolvedor. Criou um novo Storyboard, marcou o novo como controlador de visualização inicial e definiu o novo como o storyboard principal por meio de Projects Deployment Info. Começou a funcionar magicamente. Não tenho certeza se é algum bug com o Xcode. developer.apple.com/library/ios/referencelibrary/GettingStarted/…
ioWint

Isso não funcionou ou acredito que não funcionará, a menos e até que o controlador de navegação inicial seja definido como "é o Controlador de visualização inicial".
Sumit Kumar Saha

Eu ia tentar isso. Mas então eu limpei e construí novamente e funcionou
Skywalker

305

Verifique se é o controlador de visualização inicial no Inspetor de atributos.

insira a descrição da imagem aqui


Claro que esta é 'a forma como deve funcionar'. Mas também encontrei o 'bug' e isso não funciona. Criar um novo e copiar todas as suas coisas funcionou! No meu caso.
Tys

Mas seu controlador de visualização já está definido como Controlador de visualização inicial, não é?
Iurii Vasylenko

@YuraVasylenko: Não era antes, então indiquei por marca como selecionado.
Ashvin Ajadiya

1
Apenas para torná-lo um pouco mais detalhado para quem precisa, Configurando o controlador inicial para um storyboard
Sergei Basharov

40

Primeiro clique em View Controller na barra de utilitários do lado direito . Em seguida, selecione o Attributes Inspector e certifique-se de que na seção View Controller a caixa de seleção 'Is Initial View Controller' esteja marcada!


1
Esse era o meu problema. Excluí o controlador de visualização padrão que meu storyboard tinha e quando adicionei outro tive que verificar isso.
Orgmir

17

Este aviso também é relatado se você tiver algum código como:

    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window?.rootViewController = myAwesomeRootViewController
    window?.makeKeyAndVisible()

Nesse caso, vá para a primeira página de configurações de destino e defina Main Interfacecomo vazio, uma vez que você não precisa de uma entrada de storyboard para seu aplicativo.


14

Usando o Interface Builder:

Verifique se ' É controlador de visualização inicial ' está definido. Você pode configurá-lo usando as etapas abaixo:

  1. Selecione seu controlador de visualização (que deve ser exibido como tela inicial).
  2. Selecione o inspetor de atributos de janela Utilitários .
  3. Selecione ' Is Initial View Controller ' em View Controller seção (se não).

Se você fez esta etapa e ainda está recebendo erros, então uncheck and do it again.

Passos para resolver o problema

Usando programaticamente:

Objective-C:

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

        return YES;

Rápido :

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController

        self.window?.rootViewController = objMainViewController

        self.window?.makeKeyAndVisible()

        return true

3
Se você fizer isso programaticamente, certifique-se de remover o storyboard da interface principal do seu alvo - apenas deixe em branco. Também deve entrar didFinishLaunchingWithOptions.
Jordan H

@JordanH como remover o storyboard da interface principal dos alvos?
PascalS

@Passe Selecione o texto e aperte delete, está na aba General
Jordan H

12

Eu experimentei isso com meu Tab Bar Controller não aparecendo no simulador junto com uma tela preta. Fiz o seguinte para que meu aplicativo apareça no Simulador.

  1. Vá para Main.storyboard.
  2. Verifique na Is Initial View Controllerguia do inspetor de atributos.

É o controlador de visualização inicial no Inspetor de atributos.


10

Configure a janela manualmente,

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (!application.keyWindow.rootViewController) 
     {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *myViewController= [storyboard instantiateViewControllerWithIdentifier:@"myViewController identifier"];

         application.keyWindow.rootViewController = myViewController;
     }
}

É necessário desmarcar o viewcontroller inicial no storyboard?
bdv

7

Recebo este erro quando mudo o nome do arquivo de storyboard " Main.storyboard " PARA: " XXX.storyboard "

A solução para mim foi:

  • Produto-> Limpo
  • ALTERAR: Arquivos de suporte -> info.plist -> Nome da base do arquivo de storyboard principal -> Principal para : XXX

Boa sorte



3

insira a descrição da imagem aqui

Além da resposta correta acima, também certifique-se de que configurou a interface principal correta em geral.


3

1ª opção

se você deseja definir seu storyboard personalizado em vez de um controlador de visualização padrão.

Altere este atributo do arquivo info.plist

<key>UISceneStoryboardFile</key> <string>Onboarding</string>

Onboarding seria o nome do seu storyboard

para abrir este clique com o botão direito no arquivo info.plist e abra como um código-fonte

2ª opção

1- Clique no seu projeto

2- Selecione seu projeto na seção de destino

3- Mover para a seção de interface de implantação

4- Altere a seção do storyboard no campo Interface principal

Lembre-se de definir seu controlador de visualização inicial do storyboard


1
A coisa <key> UISceneStoryboardFile </key> corrigiu para mim. Obrigado.
bogdan

2

Se você adicionou um novo storyboard, você deve verificar os seguintes pontos.

1) Em seu arquivo plist, verifique o valor do nome base do arquivo de storyboard principal (iPad) ou (iPhone) deve corresponder ao nome do arquivo de storyboard ( não adicione a extensão .storyboard )

2) No storyboard deve haver um controlador de visualização que é definido como controlador de visualização inicial

3) Limpe e construa seu projeto. :)

insira a descrição da imagem aqui


1

Se você tem enviado seu código para o controle de origem regularmente, isso pode evitar o incômodo de criar um novo Storyboard e possivelmente introduzir mais problemas ...

Consegui resolver isso comparando o código-fonte do Git da versão que funcionava com o código quebrado. O diff mostrou que a primeira linha deve conter o Id do controlador de visualização inicial, no meu caso, initialViewController = "Q7U-eo-vxw" . Eu pesquisei o código-fonte para ter certeza de que a id existia. Tudo que eu tive que fazer foi colocá-lo de volta e tudo funcionou novamente!

<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5056" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="Q7U-eo-vxw">
    <dependencies>
        <deployment defaultVersion="1296" identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
    </dependencies>
    <scenes>

Aqui estão algumas etapas que podem ajudá-lo a solucionar o problema:

  1. Clique com o botão direito no Storyboard com falha e use Source Control> Commit ... para preservar suas alterações desde o último commit.
  2. Tente clicar com o botão direito em seu Storyboard com falha e use "Abrir como> Código-fonte" para visualizar o XML do storyboard.
  3. No elemento do documento , procure o atributo denominado " initialViewController ". Se estiver faltando, não se preocupe, nós consertaremos. Se estiver lá, clique duas vezes no id que está atribuído a ele, command-c para copiá-lo, command-f command-v para pesquisá-lo mais profundamente no documento. Este é o identificador do controlador que deve fornecer a visualização inicial. Se não estiver definido no documento, isso é um problema - você deve removê-lo da tag do documento, no meu caso initialViewController = "Q7U-eo-vxw" .
  4. Vá para o item de menu do Xcode chamado Exibir e escolha Editor de Versão> Mostrar Visualização de Comparação
  5. Isso mostra sua versão local à esquerda e a versão histórica à direita. Clique na data abaixo da versão histórica para obter uma lista dos commits para este storyboard. Escolha um que você sabe que funcionou e compare o elemento do documento . Qual é a id do * initialViewController ? É diferente? Em caso afirmativo, tente editá-lo de volta manualmente e correndo. Ferramenta de comparação histórica do xcode em ação

1

Verifique se você tem a janela var no AppDelegate.

var window: UIWindow? 

E também verifique o storyboard do seu arquivo Info.plist.

<key>UIMainStoryboardFile</key>
<string>Main</string>

Configurar o rootViewController programaticamente no AppDelegate não vai corrigir o aviso. Você deve escolher se deseja permitir que o storyboard defina o controlador de visualização ou fazê-lo programaticamente.


1

Projetos criados no Xcode 11 e superior, simplesmente alterar o arquivo da interface principal nas configurações do projeto não será suficiente.

Você deve editar manualmente o arquivo Info.plist e definir o nome do storyboard para o UISceneStoryboardFiletambém.


1

Nenhuma das opções acima resolveu o problema para mim. No meu caso, também não estava definindo o manifesto de cena do aplicativo correto.

Eu tive que mudar LoginScreen costumava ser principal

insira a descrição da imagem aqui


Surpreso, isso não obteve tantos votos. Isso acontecerá em praticamente qualquer implementação de SceneDelegate (que não use Storyboard como controlador inicial).
bauerMusic
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.