ios - style - pwa safari icon
Error fatal: se encontrĂ³ inesperadamente nulo mientras se desenvuelve un valor opcional (13)
Esta pregunta ya tiene una respuesta aquí:
Estaba usando un UICollectionView
en Swift pero me UICollectionView
cuando trato de 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 sobre esto?
error fatal: encontrado inesperadamente nulo mientras desenvuelve un valor opcional
- Verifique la colección de IBOutlet, ya que este error tendrá la oportunidad de desconectar el uso del objeto uielement.
:) espera que ayude a algunas personas con problemas.
Busqué una solución para esto yo mismo. solo mi problema estaba relacionado con UITableViewCell Not UICollectionView como mencionas aquí.
En primer lugar, soy nuevo en el desarrollo de iOS. Como nuevo, sentado aquí tratando de llegar a través de mi primer tutorial, así que no tomes mi palabra para nada. (a menos que funcione;))
Estaba obteniendo 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. Así que ingresé el archivo de cabecera para UITableViewCell y lo encontré.
var detailTextLabel: UILabel! { get } // default is nil. label will be created if necessary (and the current style supports a detail label).
Entonces me di cuenta de que dice (y el estilo actual es compatible con una etiqueta de detalle) - Bueno, el estilo personalizado no tiene una etiqueta detallada allí por defecto. así que solo tuve que cambiar el estilo de la celda en el guión gráfico, y todo estaba bien.
Supongo que tu etiqueta siempre debe estar ahí.
Entonces, si el siguiente consejo de Connor, eso significa básicamente, SI esa etiqueta está disponible, entonces úsala. Si su estilo está configurado correctamente y el identificador de reutilización coincide con el del conjunto de guiones gráfico, no debería tener que hacer esta comprobación a menos que use más de una celda personalizada.
Casi con certeza, su "title"
identificador "title"
identificador de reutilización es incorrecto.
Podemos ver desde la firma del método UITableView.h
de dequeueReusableCellWithIdentifier
que el tipo de retorno es un Opcionalmente Desempaquetado Opcionalmente :
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 "Opcionalmente Desempaquetado Implícitamente"?
El lenguaje de programación Swift nos dice:
A veces es claro desde la estructura de un programa 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 de la opción cada vez que se acceda, ya que se puede suponer que tiene un valor todo el tiempo.
Este tipo de opciones se definen como opciones opcionales implícitamente desempaquetadas. Usted escribe una opción opcional implícitamente desenvuelta 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 pudo haber sido nulo en un punto, pero que desde algún punto en adelante nunca vuelve a ser nulo. Por lo tanto, nos ahorramos un poco de molestia tomándolo como el valor desenvuelto.
En este caso, tiene sentido que dequeueReusableCellWithIdentifier
devuelva dicho valor. El identificador proporcionado debe haberse utilizado ya para registrar la celda para su reutilización. Proporcione un identificador incorrecto, el dequeue no puede encontrarlo, y el tiempo de ejecución devuelve un valor nulo que nunca debería ocurrir. Es un error fatal, la aplicación se bloquea y la salida de la consola da:
fatal error: unexpectedly found nil while unwrapping an Optional value
En pocas palabras: compruebe el identificador de reutilización de su celda especificado en .storyboard, Xib o en el código, y asegúrese de que sea correcto al eliminar.
Compruebe si la celda se está registrando con 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ás usando un guión gráfico, no quieres llamarlo. Va a sobrescribir lo que tienes en tu guión gráfico".
El mismo mensaje aquí, pero con una causa diferente. Tuve un UIBarButton
que impulsó una transición. El segue carecía de un identificador.
Estaba teniendo el mismo problema y la razón fue porque estaba tratando de cargar un UIImage con el nombre incorrecto. Vuelva a verificar .setImage(UIImage(named: "-name-"
calls y asegúrese de que el nombre sea correcto).
Estaba teniendo este problema también 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.
Intentaba cambiar el texto programáticamente en un UILabel. Usar "self.mylabel.text" funcionó bien hasta que agregué otro controlador de vista en la misma clase que no incluía esa etiqueta. Fue entonces 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í, de lo contrario se obtiene un error. Si tiene dos controladores de vista diferentes con códigos diferentes, asígnelos a diferentes clases. Esto funcionó para mí y, con suerte, se aplica a lo que estás haciendo.
Nil Coalescing Operator también se puede usar.
rowName = rowName != nil ?rowName!.stringFromCamelCase():""
No sé si es un error o algo, pero sus etiquetas y otras IU no se inicializan automáticamente cuando usa una celda personalizada. Debería probar esto en su clase UICollectionViewController
. Funcionó para mí
override func viewDidLoad() {
super.viewDidLoad()
let nib = UINib(nibName: "<WhateverYourNibName>", bundle: nil)
self.collectionView.registerNib(nib, forCellReuseIdentifier: "title")
}
Puede evitar que se produzca el bloqueo desenrollando cell.labelTitle
forma cell.labelTitle
con una instrucción if let
.
if let label = cell.labelTitle{
label.text = "This is a title"
}
Sin embargo, todavía tendrá que hacer algunas depuraciones para ver por qué está obteniendo un valor nulo allí.
Recibí su error cuando estaba tratando de acceder a UILabel
. ¡Olvidé conectar UILabel
a IBOutlet
en Storyboard y eso causó que la aplicación IBOutlet
con este error!
Reemplace esta línea cell.labelTitle.text = "This is a title"
con cell.labelTitle?.text = "This is a title"
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. En la sección de la vista de tabla, configure la celda de la vista de tabla con el nombre del identificador correspondiente que está utilizando en el programa, asegúrese de que coincidan .