iOS 7: no se puede crear una instancia del controlador de vista predeterminado

93

Estoy usando Xcode 5 en una aplicación recién creada y cuando la creo, busco el botón Ejecutar y hago clic en él, luego el proyecto se compila pero no se muestra en el simulador de iOS y aparece el siguiente mensaje:

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

Lo he buscado en Google, por supuesto, y todos señalan que esto está sucediendo porque XCode aún no sabe qué controlador de vista es el inicial. Pero lo extraño es que creé la aplicación como una aplicación basada en páginas (también probé las opciones de aplicación de vista única y pestañas) y XCode ya había definido un Storyboard para ella.

Además, cuando voy a la opción de interfaz principal del proyecto, se establece el guión gráfico (llamado "Principal" por el propio Xcode), y en el guión gráfico, mi controlador de vista se configura como el "Controlador de vista inicial"

ingrese la descripción de la imagen aquí

¿Qué está mal?

rodrigoalvesvieira
fuente
intente configurarlo
programáticamente
@Ramshad Hola, soy una especie de novato en el desarrollo de iOS. ¿Cómo puedo hacer eso?
rodrigoalvesvieira
2
Asegúrese de configurar el controlador de vista para que sea el controlador de vista inicial.
Sandeep
Como señaló Kashif Ahmed, también debe abrir su archivo Info.plist como código fuente y editar la cadena <key> UISceneStoryboardFile </key> y proporcionar allí el nombre de su nuevo guión gráfico.
bogdan

Respuestas:

56

Así que esto también me pasó a mí. Lo verifiqué 50 veces y mi "Es el controlador de vista inicial" fue verificado, créanme. Sucedió de la nada. Entonces, ¿cómo lo solucioné?

  1. Cree un nuevo Storyboard en su proyecto, asígnele un nombre como Main_iPhoneV2 (o iPadV2 dependiendo de su estilo de storyboard original)
  2. Abra el guión gráfico roto, haga clic en cualquier lugar del área blanca y presione comando-a, luego comando-c (seleccione todo y copie)
  3. Abra su nuevo guión gráfico y presione comando-v para pegar exactamente la misma configuración
  4. Vaya a la configuración de su proyecto, cambie su "Interfaz principal" a la nueva Main_iPhoneV2 (si es su iPad y está escribiendo una aplicación universal, tendrá que editar el -Info.plist y buscar el valor "Archivo principal del guión gráfico nombre base (iPad)
  5. Vuelve a compilar y deja de arrancarte el pelo
Ryna
fuente
3
encontró el mismo problema al intentar los pasos enumerados en los conceptos básicos del desarrollador. Creó un nuevo Storyboard, marcó el nuevo como controlador de vista inicial y configuró el nuevo como Storyboard principal a través de la Información de implementación de proyectos. Mágicamente comenzó a funcionar. No estoy seguro si es un error con Xcode. developer.apple.com/library/ios/referencelibrary/GettingStarted/…
ioWint
Esto no funcionó o creo que no funcionará, a menos que y hasta que el controlador de navegación inicial esté configurado como "es el controlador de vista inicial".
Sumit Kumar Saha
Iba a intentar esto. Pero luego limpié y construí de nuevo y funcionó
Skywalker
305

Compruebe si es el controlador de vista inicial en el inspector de atributos.

ingrese la descripción de la imagen aquí

Ashvin Ajadiya
fuente
Por supuesto, esta es 'la forma en que debería funcionar'. Pero también me he encontrado con el 'error', y luego esto no funciona. ¡Crear uno nuevo y copiar todas tus cosas funcionó! en mi caso.
Tys
Pero su controlador de vista ya está configurado como Controlador de vista inicial, ¿no es así?
Iurii Vasylenko
@YuraVasylenko: No fue antes, así que lo he indicado con mark como seleccionado.
Ashvin Ajadiya
1
Solo para hacerlo un poco más detallado para aquellos que lo necesitan, Configuración del controlador inicial para un guión gráfico
Sergei Basharov
40

Primero haga clic en Ver controlador en la barra de utilidades del lado derecho . A continuación, seleccione el Inspector de atributos y asegúrese de que, en la sección Controlador de vista, la casilla de verificación 'Es controlador de vista inicial' esté marcada.

Andy
fuente
1
Este era mi problema. Eliminé el controlador de vista predeterminado que tenía mi guión gráfico y cuando agregué otro tuve que verificar esto.
Orgmir
17

Esta advertencia también se informa si tiene algún código como:

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

En este caso, vaya a la primera página de la configuración de destino y configúrelo Main Interfaceen vacío, ya que no necesita una entrada de guión gráfico para su aplicación.

superarts.org
fuente
14

Usando Interface Builder:

Compruebe si está configurado " Es el controlador de vista inicial ". Puede configurarlo siguiendo los pasos a continuación:

  1. Seleccione su controlador de vista (que aparecerá como pantalla inicial).
  2. Seleccione el inspector de atributos en la ventana Utilidades .
  3. Seleccione ' Es controlador de vista inicial ' en la sección Controlador de vista (si no es así).

Si ha realizado este paso y sigue recibiendo el error, uncheck and do it again.

Pasos para resolver el problema

Usando programáticamente:

C objetivo :

        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
Jayprakash Dubey
fuente
3
Si lo hace mediante programación, asegúrese de eliminar su guión gráfico de la interfaz principal de su objetivo, simplemente déjelo en blanco. También esto debería entrar didFinishLaunchingWithOptions.
Jordan H
@JordanH ¿cómo eliminar el guión gráfico de la interfaz principal de los objetivos?
PascalS
@Passe Seleccione el texto y presione eliminar, está en la pestaña General
Jordan H
12

He experimentado esto con mi controlador de barra de pestañas que no aparece en el simulador junto con una pantalla negra. Hice lo siguiente para que mi aplicación apareciera en el Simulador.

  1. Vaya a Main.storyboard.
  2. Consulte la Is Initial View Controllerpestaña del inspector de atributos.

Es el controlador de vista inicial en el inspector de atributos.

Contras Bulaquena
fuente
10

Configure la ventana 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;
     }
}
Shamsudheen TK
fuente
¿Requiere esto desmarcar el controlador de vista inicial en el guión gráfico?
bdv
7

Recibo este error cuando cambio el nombre del archivo del guión gráfico " Main.storyboard " A: " XXX.storyboard "

La solución para mí fue:

  • Producto-> Limpiar
  • CAMBIO: Archivos de soporte -> info.plist -> Nombre base del archivo del guión gráfico principal -> Main TO: XXX

Buena suerte

Hovanes Mosoyan
fuente
3

El producto "Clean" fue la solución para mí.

Walter Schurter
fuente
3

ingrese la descripción de la imagen aquí

Aparte de la respuesta correcta anterior, también asegúrese de haber configurado la Interfaz principal correcta en General.

Naren
fuente
3

Primera opción

si desea configurar su guión gráfico personalizado en lugar de un controlador de vista predeterminado.

Cambiar este atributo del archivo info.plist

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

La incorporación sería el nombre de su guión gráfico

para abrir este clic derecho en el archivo info.plist y abrirlo como código fuente

Segunda opción

1- Haz clic en tu proyecto

2- Seleccione su proyecto de la sección de destino

3- Mover a la sección de interfaz de implementación

4- Cambie la sección de su guión gráfico desde el campo Interfaz principal

Recuerde configurar el controlador de vista inicial del guión gráfico

Kashif Ahmed
fuente
1
La cosa <key> UISceneStoryboardFile </key> me lo arregló. Gracias.
bogdan
2

Si agregó un nuevo guión gráfico, debe verificar los siguientes puntos.

1) En su archivo plist, el valor de verificación del nombre base del archivo del guión gráfico principal (iPad) o (iPhone) debe coincidir con el nombre del archivo del guión gráfico ( no agregue la extensión .storyboard )

2) En el guión gráfico debe haber un controlador de vista que se establezca como Es el controlador de vista inicial

3) Limpia y construye tu proyecto. :)

ingrese la descripción de la imagen aquí

Sachin Nikumbh
fuente
1

Si ha estado enviando su código al control de código fuente con regularidad, esto puede ahorrarle la molestia de crear un nuevo Storyboard y posiblemente introducir más problemas ...

Pude resolver esto comparando el código fuente de Git de la versión que funcionaba con el roto. El diff mostró que la primera línea debería contener el Id del controlador de vista inicial, en mi caso, initialViewController = "Q7U-eo-vxw" . Busqué en el código fuente para asegurarme de que existía la identificación. ¡Todo lo que tenía que hacer era volver a colocarlo y todo funcionaba de nuevo!

<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>

A continuación, se muestran algunos pasos que pueden ayudarlo a solucionar problemas:

  1. Haga clic con el botón derecho en el Storyboard que falla y use Source Control> Commit ... para preservar sus cambios desde la última confirmación.
  2. Intente hacer clic con el botón derecho en el guión gráfico que falla y use "Abrir como> Código fuente" para ver el XML del guión gráfico.
  3. En el elemento del documento , busque el atributo denominado " initialViewController ". Si falta, no se preocupe, lo arreglaremos. Si está allí, haga doble clic en el ID que se le asigna, comando-c para copiarlo, comando-f comando-v para buscarlo más profundamente en el documento. Este es el identificador del controlador que debe proporcionar la vista inicial. Si no está definido en el documento, entonces eso es un problema. Debería eliminarlo de la etiqueta del documento, en mi caso initialViewController = "Q7U-eo-vxw" .
  4. Vaya al elemento del menú Xcode llamado Ver y elija Editor de versiones> Mostrar vista de comparación
  5. Esto muestra su versión local a la izquierda y la versión histórica a la derecha. Haga clic en la fecha debajo de la versión histórica para obtener una lista de las confirmaciones para este guión gráfico. Elija uno que sepa que funcionó y compare el elemento del documento . ¿Cuál es la identificación del * initialViewController ? Es diferente Si es así, intente editarlo nuevamente a mano y ejecutándolo. Herramienta de comparación histórica de xcode en acción
neoscribe
fuente
1

Compruebe si tiene la ventana var en AppDelegate.

var window: UIWindow? 

Y también verifique el guión gráfico de su archivo Info.plist.

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

La configuración programática de rootViewController en AppDelegate no solucionará la advertencia. Debe elegir si dejar que el guión gráfico configure el controlador de vista o hacerlo mediante programación.

rockdaswift
fuente
1

Proyectos creados en Xcode 11 y superior, simplemente cambiar el archivo de interfaz principal de la configuración del proyecto no será suficiente.

Debe editar manualmente el archivo Info.plist y establecer el nombre del guión gráfico UISceneStoryboardFiletambién.

Isuru
fuente
0

Ninguno de los anteriores me resolvió el problema. En mi caso, tampoco estaba configurando el manifiesto de escena de aplicación correcto.

Tuve que cambiar LoginScreen que solía ser Main

ingrese la descripción de la imagen aquí

Julián Silvestri
fuente