Storyboard no contiene un controlador de vista con identificador

175

Sigo recibiendo el siguiente error:

Storyboard (<UIStoryboard: 0x7ebdd20>) doesn't contain a view controller with identifier 'drivingDetails'

Este es el código:

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   UIViewController *controller =  [self.storyboard instantiateViewControllerWithIdentifier:@"drivingDetails"];
   controller.title = [[dao libraryItemAtIndex:indexPath.row] valueForKey:@"name"];
   [self.navigationController pushViewController:controller animated:YES];
}

Ya lo configuré identifieren UIStoryboardpero todavía recibo este error.

ingrese la descripción de la imagen aquí


Estera
fuente
44
Parece que configura el identificador de un segue, no un controlador de vista. ¿Qué controlador de vista en esa imagen estás tratando de presentar? ¿Y por qué no estás usando un segue?
Firoze Lafeer
Hasta Driving view controller funciona bien ... que cuando intento presentar TableViewController me sale el error ...... ¿cómo lo haría?
Mat
Vaya a Storyboard, elimine esa ID de Storyboard y agregue nuevamente. A veces es necesario limpiar la carpeta de compilación y los datos derivados
onmyway133

Respuestas:

244

Solo para referencia futura:

Estoy desarrollando en iOS 6 usando Storyboards.

Estaba teniendo el mismo problema, pero no pude encontrar el campo "Identificador" en el inspector. En su lugar, solo configure el campo llamado "Storyboard ID" a lo que llamaría el Identificador. Este campo se puede encontrar en la pestaña "Mostrar el inspector de identidad" en el inspector.

[Nota: los comentarios a continuación indican que algunas personas han descubierto que necesitan (¿también?) Establecer el campo "ID de restauración" justo debajo de la ID del guión gráfico en el inspector. Hacer clic en "Usar ID del guión gráfico" no parece ser suficiente.]

Hay una imagen a continuación para referencia: (en este caso, he nombrado mi identificador igual que mi clase) ingrese la descripción de la imagen aquí

khaliq
fuente
24
pre XCode 4.4 y anterior: Identificador; XCode 4.5: ID del guión gráfico
ilmiacs
Gracias por su información. Tuve problemas para encontrar el identificador en el guión gráfico siguiendo las explicaciones en google, pero no pude encontrar el identificador en Xcode4.6. Este es un gran problema para los novatos. Gracias.
principiantes
44
Lo que funcionó para mí fue usar el ReuseIndentifier. El ID del guión gráfico sigue provocando una excepción de puntero nulo.
Droid Chris
El mismo caso aquí @DroidChris
Ahmed
55
comprobar "Usar ID del guión gráfico" me hizo feliz
antes del
189

En Xcode 7-11 ,

cuando cambia las ID del guión gráfico y obtiene errores como este,

solo LIMPIA tu proyecto ( CMD+ SHIFT+ K)

Ted
fuente
13
¿Por qué siempre me olvido de hacer esto? Soluciona los problemas más locos. ¡Gracias, Ted, por recordármelo!
AlphaCodaSeven
2
Este problema se produjo en XCode 7.2 cuando se extrajo de un repositorio en el que se asignó un identificador a un VC en el guión gráfico. La limpieza del proyecto pareció resolver el problema.
Ed George
2
Pensé que me estaba volviendo loco ... un simple ejemplo no estaba funcionando, esto funcionó.
dokun1
2
Sí, está funcionando! algún tiempo Limpiar el proyecto xcode eliminará referencias no deseadas al proyecto
kiran
3
Vengo de Android Studio y desarrollo de Android. Es una locura cuántos trucos tengo que usar en XCode y Swift. Realmente tengo que llorar. Seriamente.
ktamas
43

¡Fijo! No solo se debe establecer el identificador en el segmento, en mi caso DrivingDetails, sino que también se debe establecer el identificador en mi tableViewController como DrivingDetails ... verifique mi imagen:

ingrese la descripción de la imagen aquí

También eliminé el controlador de vista de navegación, por lo que ahora los 2 controladores de vista de tabla están conectados directamente con una animación "push".

***** EDITAR para XCODE 7.0 *****

debe configurar el storyboardId (en este caso, viewController está incrustado en un controlador de navegación:

let lastMinVc  = mainStoryBoard.instantiateViewControllerWithIdentifier("lastMinuteNavController") as! UINavigationController

ingrese la descripción de la imagen aquí

Estera
fuente
2
Me encuentro con un problema similar a esta pregunta, pero cuando voy al inspector de atributos no veo 2 campos como en su captura de pantalla solo un campo de Título, sin campo de identificador
Anon957
¿Has mirado la respuesta anterior? Creo que está más actualizado. Gracias
Mat
1
El identificador para el segue no tiene nada que ver con esto. Solo la ID del guión gráfico para el controlador de vista debe configurarse en el guión gráfico.
Jawwad
Posiblemente relacionado. En iOS7 [storyboard instantiateViewControllerWithIdentifier]NO está creando instancias de las vistas de Interface Builder dentro del controlador de vista; pero en iOS6 lo hizo
William Entriken
30
let storyboard = UIStoryboard(name: "StoryboardFileName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "StoryboardID")
self.present(controller, animated: true, completion: nil)

Nota:

  • "StoryboardFileName"es el nombre de archivo del Storyboard y no la ID del storyboard.
  • "StoryboardID"es la ID que ha configurado manualmente en el inspector de identidad para ese guión gráfico (vea la captura de pantalla a continuación).

ID del guión gráfico

A veces la gente cree que el primero es el ID del guión gráfico y el segundo el nombre de la clase Controlador de vista, así que tenga en cuenta la diferencia.

Rafael
fuente
1
¡¡Esta!! Mi hombre, acabas de resolver mi misterio de 18 horas. Gracias por la explicación concisa.
mrfevrier
1
¡Jesucristo! ¡Gracias por esto! .instantiateViewController(withIdentifier: "StoryboardID")debería renombrarse a .instantiateStoryboard(withIdentifier: "StoryboardID")O simplemente algo más simpleUIStoryboard(name: "StoryboardFileName", bundle: nil).init()
roosevelt
16

Identidad ubicada en la pestaña Inspector de identidad denominada ID del guión gráfico para Xcode 6.3.2 y marcada la opción Usar ID del guión gráfico. ingrese la descripción de la imagen aquí

BeyazBaron
fuente
Este fue el problema todo el tiempo, esto funcionó en ambos lugares donde estaba teniendo problemas. No solo se establece el valor de ID del guión gráfico, sino que debe verificar el 'Usar ID del guión gráfico'
Tyler Hack
"Usar ID del guión gráfico" fue la pieza vital que faltaba para mí. Gracias.
Marcy
9

Acabo de tener este problema después de agregar un nuevo VC al guión gráfico, pero solo en el dispositivo, no en el simulador. Resulta que se debió a tener múltiples localizaciones de guiones gráficos: el VC solo se agregó a la primaria. Intenté eliminar las otras localizaciones (una de las cuales es la que usa mi iPhone) pero aún tuve el error. Al final tuve que recrear las otras localizaciones con el nuevo VC en cada una de ellas.

Hari Karam Singh
fuente
5

El compilador muestra el siguiente error:

Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Storyboard (<UIStoryboard: 0x7fedf2d5c9a0>) doesn't contain a 
ViewController with identifier 'SBAddEmployeeVC''

Aquí el objeto del guión gráfico creado no es el guión gráfico principal que contiene nuestros ViewControllers. Como el archivo del guión gráfico en el que trabajamos se denomina Main.storyboard . Entonces necesitamos tener referencia de objeto del Main.storyboard .

Use el siguiente código para eso:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

Aquí storyboardWithNameestá el nombre del archivo del guión gráfico con el que estamos trabajando y bundleespecifica el paquete en el que se encuentra nuestro guión gráfico (es decir mainBundle).

Ravi Bhanushali
fuente
5

Para aquellos con el mismo problema que @Ravi Bhanushali, aquí hay una solución Swift 4:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

confitz20
fuente
Esto debería agregarse un comentario en la respuesta de @Ravi.
Sunil
Tendría pero no tengo la reputación. Alguien con suficiente reputación es más que bienvenido
confitz20
4

Lo encontré ... haga clic en el controlador de vista en el guión gráfico, haga clic en el tercer icono de la izquierda en los inspectores de atributos vc, en el que establece el nombre de la llamada en ese cuadro que dice 'identidad': el mío estaba oculto, tuve que haga clic en la palabra identidad, luego muestra storyboardID: agregue el identificador del código, listo

Jon
fuente
4

La modificación de "Storyboard ID" en el inspector de identidad (el tercer icono a la izquierda) debería funcionar.

Si no es así y está seguro de que no hay errores tipográficos, intente limpiar el proyecto ("Producto" -> "Limpiar", o simplemente comando + shift + K).

aychen0110
fuente
salvó mi vida. Gracias. (especialmente la parte sobre la limpieza)
Jay
1

Mientras ingresa el identificador que no ha seleccionado el controlador de vista apropiado, solo verifique una vez si ha terminado, repita el procedimiento una vez más.

iamsult
fuente
¿Qué controlador de vista debo seleccionar? lo siento estoy confundido.
Mat
TableViewController * controller = [self.storyboard instantiateViewControllerWithIdentifier: @ "drivingDetails"]; controller.title = [[dao libraryItemAtIndex: indexPath.row] valueForKey: @ "name"]; [self.navigationController pushViewController: controlador animado: SÍ]; ¿Me gusta esto?
Mat
Según la imagen, TableViewController debe seleccionarse como lo está haciendo para mostrar los detalles en ese controlador.
iamsult
Explicación paso a paso del storyboard
iamsult
1
Solo una pequeña nota: su identificador de segue y el identificador del controlador de vista son diferentes. Solo quería resaltar que en caso de que hubiera alguna confusión ya que está utilizando el mismo nombre para ambos. Su identificador de segue debe usarse en prepareForSegue y su identificador de controlador de vista es para cargar vistas desde su guión gráfico directamente. scott-sherwood.com/?p=219
Scott Sherwood
1

A algunos de mis controladores de vista les faltaba el atributo storyboardIdentifier .

Antes de:

<viewController
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">

Después:

<viewController
    storyboardIdentifier="YourViewControllerName"   <----
    id="pka-il-u5E"
    customClass="YourViewControllerName"
    customModule="ModuleName"
    customModuleProvider="target"
    sceneMemberID="viewController">
Andy
fuente
0

Obtuve el mismo error y pude solucionarlo cambiando los siguientes cambios en mi proyecto. He mencionado el nombre de mi clase en el panel del inspector y luego el problema está resuelto. Goto-> panel derecho allí Inspector de identidad En la sección de clase personalizada

clase: su nombre de clase (ViewController)

En la sección Identidad ID del guión gráfico: su ID del guión gráfico (ver Nombre del controlador)

Después de esto, haga clic en la opción Usar ID de guión gráfico allí. Eso es todo, el problema ha terminado. Espero que te ayude....

Narasimha Nallamsetty
fuente
0

Use su identificador (@ "drivingDetails") como ID del guión gráfico.

Priyam
fuente
0

es muy simple seleccionar el controlador de vista respectivo en el storyboard principal y verificar el storyboardID si está presente, usarlo en el identificador de dar un nombre y usarlo.

aquí mi primero es el storyboardID let vc = self.storyboard? .instantiateViewController (withIdentifier: "firstone") como! tabBarViewController

Saba Zehra
fuente
0

Probé todas las soluciones anteriores y ninguna funcionó.

Lo que hice fue:

  • Proyecto limpio
  • Eliminar datos derivados
  • Reiniciar Xcode
  • Vuelva a ingresar el StoryboardID que se muestra en las respuestas anteriores (dentro de IB).

Y luego funcionó. Lo sorprendente fue que ingresé la ID de Storyboar en el generador de interfaces y la eliminé / eliminé después de abrir Xcode nuevamente.

Espero que esto ayude a alguien.

Darkwonder
fuente
0

Limpiar todo y cerrar Xcode no me resolvió el problema.

Tuve que eliminar viewController y crear uno nuevo con un nuevo identificador.

usuario3722523
fuente
0

Nota: Si usa cocoapods en su proyecto, primero ejecute pod deintegrateyrm Podfile.lock

Luego abra la carpeta de su proyecto en cualquier editor de código de terceros como VSCode y realice una búsqueda global del nombre de ViewController que arroja el error.

  1. Cambie el nombre / corrija los nombres incorrectos que encuentre.
  2. Guarda todos los cambios.
  3. Limpia y construye tu proyecto.

Todo debería funcionar bien ahora.

Esto se debe con mayor frecuencia al cambiar el nombre de los archivos desde Xcode.

Arjun Shukla
fuente
-1

XCODE DRAG N DROP PANE SE HA IDO !!!

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Señor heelis
fuente