Error fatal: inesperadamente encontrado nulo al desenvolver un valor opcional [duplicado]

129
rulilg 2014-07-09 14:12.

Estaba usando un UICollectionViewen Swift, pero obtengo cuando intento cambiar el texto de la etiqueta de la celda.

    func collectionView(collectionView: UICollectionView!, numberOfItemsInSection section: Int) -> Int
{
    return 5
}

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell!
{
    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("title", forIndexPath: indexPath) as TitleCollectionViewCell
    // Next line: fatal error: unexpectedly found nil while unwrapping an Optional value
    cell.labelTitle.text = "This is a title"
    return cell
}

¿Alguien sabe de esto?

13 answers

80
Max MacLeod 2014-08-11 23:17.

Es casi seguro que su identificador de reutilización "title"es incorrecto.

Podemos ver en la UITableView.hfirma del método dequeueReusableCellWithIdentifierque el tipo de retorno es un Opcional implícitamente no envuelto :

func dequeueReusableCellWithIdentifier(identifier: String!) -> AnyObject! // Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one.

Eso está determinado por el signo de exclamación después de AnyObject:

    AnyObject!

Entonces, lo primero a considerar es, ¿qué es un "Opcional implícitamente no envuelto"?

El lenguaje de programación Swift nos dice:

A veces, a partir de la estructura de un programa, queda claro que un opcional siempre tendrá un valor, después de que ese valor se establezca por primera vez. En estos casos, es útil eliminar la necesidad de verificar y desenvolver el valor del opcional cada vez que se accede a él, porque se puede asumir con seguridad que tiene un valor todo el tiempo.

Estos tipos de opcionales se definen como opcionales implícitamente desenvueltos. Escribe un opcional implícitamente desenvuelto colocando un signo de exclamación (¡Cadena!) En lugar de un signo de interrogación (¿Cadena?) Después del tipo que desea que sea opcional.

Entonces, básicamente, algo que podría haber sido nulo en un momento, pero que a partir de algún momento nunca volverá a ser nulo. Por lo tanto, nos ahorramos algunas molestias al considerarlo como el valor sin envolver.

En este caso, tiene sentido dequeueReusableCellWithIdentifierdevolver dicho valor. El identificador proporcionado ya debe haberse utilizado para registrar la celda para su reutilización. Proporcione un identificador incorrecto, la eliminación de la cola no puede encontrarlo y el tiempo de ejecución devuelve un valor nulo que nunca debería suceder. Es un error fatal, la aplicación falla y el resultado de la consola da:

fatal error: unexpectedly found nil while unwrapping an Optional value

En pocas palabras: verifique su identificador de reutilización de celda especificado en el .storyboard, Xib o en el código, y asegúrese de que sea correcto al retirar de la cola.

103
Connor 2014-07-09 14:28.

Puede evitar que ocurra el bloqueo desenvolviéndolo de forma segura cell.labelTitlecon una if letdeclaración.

if let label = cell.labelTitle{
    label.text = "This is a title"
}

Sin embargo, aún tendrá que depurar un poco para ver por qué obtiene un valor nulo.

25
Ron Fessler 2014-10-11 09:50.

Compruebe si se está registrando la celda self.collectionView.registerClass(cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String). Si es así, elimine esa línea de código.

Consulte esta respuesta para obtener más información: ¿Por qué la salida de UICollectionViewCell es nula?

"Si está utilizando un guión gráfico, no quiere llamar a esto. Sobreescribirá lo que tiene en su guión gráfico".

22
greeninaqua 2014-07-28 03:58.

No sé si es un error o algo así, pero sus etiquetas y otras IU no se inicializan automáticamente cuando usa una celda personalizada. Deberías probar esto en tu UICollectionViewControllerclase. Funcionó para mí.

override func viewDidLoad() {
    super.viewDidLoad()

    let nib = UINib(nibName: "<WhateverYourNibName>", bundle: nil)
    self.collectionView.registerNib(nib, forCellReuseIdentifier: "title")
}
13
iOS Developer 2015-09-23 11:38.

Reemplace esta línea cell.labelTitle.text = "This is a title"
con cell.labelTitle?.text = "This is a title"

6
Pruthvid 2015-03-18 09:01.

Recibí su error cuando intentaba acceder UILabel. ¡¡Olvidé conectar el UILabela IBOutleten Storyboard y eso estaba causando que la aplicación fallara con este error !!

3
Melly 2014-08-04 12:31.

También estaba teniendo este problema y el problema estaba en los controladores de vista. No estoy seguro de cómo está estructurada su aplicación, así que solo explicaré lo que encontré. Soy bastante nuevo en xcode y codificación, así que tengan paciencia conmigo.

Estaba intentando cambiar programáticamente el texto en un UILabel. El uso de "self.mylabel.text" funcionó bien hasta que agregué otro controlador de vista en la misma clase que no incluía esa etiqueta. Ahí es cuando recibí el error que estás viendo. Cuando agregué el mismo UILabel y lo conecté a ese controlador de vista adicional, el error desapareció.

En resumen, parece que en Swift, todos los controladores de vista asignados a la misma clase tienen que hacer referencia al código que tiene allí, o de lo contrario obtendrá un error. Si tiene dos controladores de vista diferentes con código diferente, asígnelos a clases diferentes. Esto funcionó para mí y, con suerte, se aplica a lo que estás haciendo.

2
Kishore Kumar 2015-12-29 00:45.

error fatal: inesperadamente encontrado nil al desenvolver un valor opcional

  1. Verifique la colección IBOutlet, ya que este error tendrá la posibilidad de usar objetos uielement no conectados.

:) espera que ayude a algunas personas con dificultades.

1
Christer 2014-08-31 02:18.

Yo mismo busqué una solución a esto. solo mi problema estaba relacionado con UITableViewCell No UICollectionView como lo mencionas aquí.

En primer lugar, soy nuevo en el desarrollo de iOS. como nuevo, sentado aquí tratando de pasar por mi primer tutorial, así que no confíe en mi palabra. (a menos que esté funcionando;))

Recibí una referencia nula a cell.detailTextLabel.text: después de volver a ver el video tutorial que estaba siguiendo, no parecía que me hubiera perdido nada. Entonces ingresé el archivo de encabezado para UITableViewCell y encontré esto.

var detailTextLabel: UILabel! { get } // default is nil. label will be created if necessary (and the current style supports a detail label).

Entonces noté que dice (y el estilo actual admite una etiqueta de detalle): Bueno, el estilo personalizado no tiene una etiqueta de detalle allí de forma predeterminada. así que solo tuve que cambiar el estilo de la celda en el Storyboard, y todo estuvo bien.

Supongo que tu etiqueta siempre debería estar ahí.

Entonces, si sigues el consejo de Connor, eso básicamente significa, SI esa etiqueta está disponible, úsala. Si su estilo está configurado correctamente y el identificador de reutilización coincide con el establecido en el Storyboard, no debería tener que hacer esta verificación a menos que esté usando más de una celda personalizada.

1
Abhijeet 2015-08-29 00:20.

También se puede utilizar el operador coalescente nulo.

rowName = rowName != nil ?rowName!.stringFromCamelCase():""
1
ekeith 2016-05-23 07:23.

Tuve el mismo problema en Xcode 7.3. Mi solución fue asegurarme de que mis células tuvieran los identificadores de reutilización correctos . Debajo de la sección de vista de tabla, configure la celda de vista de tabla con el nombre de identificador correspondiente que está usando en el programa, asegúrese de que coincidan .

0
Hugo Sequeira 2016-01-06 02:33.

Estaba teniendo el mismo problema y el motivo era porque estaba intentando cargar un UIImage con el nombre incorrecto. Vuelva a verificar las .setImage(UIImage(named: "-name-"llamadas y asegúrese de que el nombre sea correcto.

0
ICT1901 2016-05-26 00:06.

El mismo mensaje aquí, pero con una causa diferente. Tuve un UIBarButtonque empujó una transición. El segue carecía de un identificador.

Related questions

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Actualice a un Sonicare por tan solo $ 30

Actualice a un Sonicare por tan solo $ 30

¿Quiere probar un cepillo de dientes Sonicare sin gastar mucho dinero en uno de sus modelos favoritos de gama alta? Puede comprar un kit de la Serie 2 o Serie 3 por tan solo $ 30 hoy en Amazon. Haga clic aquí para ver la lista completa de modelos elegibles y tenga en cuenta que se descontarán $ 10 adicionales en su carrito.

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.

Cuéntanos tus mejores trucos de Washington, DC

Cuéntanos tus mejores trucos de Washington, DC

Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está enlatando su sección de tallas grandes. Pero no están tomando la categoría solo en línea o descontinuándola por completo.

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.

India me está pateando el culo

India me está pateando el culo

Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Language