iOS 7: error al crear una instancia del controlador de vista predeterminado

Estoy usando Xcode 5 en una aplicación recién creada y cuando solo la creo voy por el botón de ejecución y hago clic en él, luego se construye el proyecto pero no aparece 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? 

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

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

enter image description here

¿Qué está mal?

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

  1. Cree un Storyboard nuevo en su proyecto, asígnele un nombre similar a Main_iPhoneV2 (o iPadV2 según el estilo del guión gráfico original)
  2. Abra el guión gráfico roto, haga clic en cualquier parte del área blanca y presione comando-a, luego comando-c (seleccionar todo y copiar)
  3. Abra su nuevo guión gráfico y presione command-v para pegar la misma configuración exacta
  4. Vaya a la configuración de su proyecto, cambie su “Interfaz principal” al nuevo Main_iPhoneV2 (si es su iPad y está escribiendo una aplicación universal, tendrá que editar el -Info.plist y buscar el valor “Archivo del guión gráfico principal” nombre base (iPad)
  5. Vuelve a unir y deja de tirarte el pelo

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

enter image description here

Primero haga clic en Ver controlador en la barra de herramientas derecha. A continuación, seleccione el Inspector de atributos y asegúrese de que en la sección Controlador de vista esté marcada la casilla ‘¿Está el controlador de la vista inicial’ ?

Usando Interface Builder:

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

  1. Seleccione su controlador de vista (que debe aparecer como pantalla inicial).
  2. Seleccione el inspector de atributos de la ventana de Utilidades .
  3. Seleccione ‘ Is Initial View Controller ‘ en la sección View Controller (si no es así).

Si ha realizado este paso y aún obtiene el error, uncheck and do it again.

Pasos para resolver el problema

Usando programáticamente:

C objective :

  self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; //  self.window.rootViewController = viewController; [self.window makeKeyAndVisible]; return YES; 

Swift:

  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 

Configura 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; } } 

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 configure Main Interface como vacía, ya que no necesita una entrada en el guión gráfico para su aplicación.

Me aparece 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-> Limpio
  • CAMBIAR: Archivos compatibles -> info.plist -> Nombre base del archivo del guión gráfico -> Principal TO: XXX

Buena suerte

Lo he experimentado con mi Controlador de barra de tabs que no aparece en el simulador junto con una pantalla negra. Hice lo siguiente para que mi aplicación aparezca en el simulador.

  1. Ir a Main.storyboard.
  2. Verifique el Is Initial View Controller en la pestaña del inspector de atributos.

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

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

enter image description here

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

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

1) En su archivo plist compruebe el valor del nombre base del archivo del guión gráfico (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 configure como Controlador de vista inicial

3) Limpia y construye tu proyecto. 🙂

enter image description here

Si has estado asignando tu código al control de fuente regularmente, esto puede ahorrarte la molestia de crear un Storyboard nuevo y posiblemente presentar más problemas …

Pude resolver esto comparando el código fuente de Git de la versión que funcionaba contra el roto. El diff mostró que la primera línea debe contener el Id del controlador de vista inicial, en mi caso, initialViewController = “Q7U-eo-vxw” . Busqué a través del código fuente para estar seguro de que la identificación existía. ¡Todo lo que tenía que hacer era volver a ponerlo y todo volvió a funcionar!

       

Estos son 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 conservar sus cambios desde el último commit.
  2. Intenta hacer clic con el botón derecho en tu Storyboard que falla y utiliza “Abrir como> Código fuente” para ver el XML del guión gráfico.
  3. En el elemento del documento , busque el atributo llamado ” initialViewController “. Si falta, no te preocupes, arreglaremos eso. Si está allí, haga doble clic en el id que está asignado, command-c para copiarlo, command-f command-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 ese es un problema. Debe eliminarlo de la etiqueta del documento, en mi caso initialViewController = “Q7U-eo-vxw” .
  4. Vaya a la opción de menú de Xcode llamada 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 los commits para este story board. 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 volver a editarlo manualmente y en ejecución. herramienta de comparación histórica xcode en acción

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.

 UIMainStoryboardFile Main 

Establecer programáticamente el control rootViewController en AppDelegate no va a corregir la advertencia. Debe elegir si desea que el storyboard configure el controlador de vista o lo haga mediante progtwigción.