Estoy usando este código para leer los datos de NSDictionary:

let itemsArray: NSArray = response.objectForKey("items") as! NSArray;
let nextPageToken: String = response.objectForKey("nextPageToken") as! String

var videoIdArray: [String] = []

for (item) in itemsArray {
      let videoId: String? = item.valueForKey("id")!.valueForKey("videoId") as? String
      videoIdArray.append(videoId!)
}

Pero cuando me items o nextPageToken no existen me sale este error:

fatal error: unexpectedly found nil while unwrapping an Optional value

Alguna idea de por qué? ¿cómo puedo solucionarlo?

  • Quitar el ; (punto y coma) en la primera línea. @MTA
  • NSDictionary objectForKey: devuelve nil si la clave no existe. Estoy bastante seguro de que las teclas son sensibles a las mayúsculas.
  • Posibles duplicados de Cómo comprobar diccionario valor está vacío o no
InformationsquelleAutor MTA | 2015-10-27

1 Comentario

  1. 6

    Hay dos problemas en su código:

    1. Usted está tratando de forzar a desplegar una opcional que puede ser nulo. No utilice nunca obligó a desenvolver, si usted no está seguro de si los datos estarán disponibles o no.
    2. Está utilizando valueForKey: en lugar de objectForKey: para la recuperación de datos de un diccionario. Uso objectForKey: en lugar de valueForKey: para la obtención de datos de un diccionario.

    Puede solucionar el choque:

    let itemsArray: NSArray?   = response.objectForKey("items") as? NSArray;
    let nextPageToken: String? = response.objectForKey("nextPageToken") as? String
    
    var videoIdArray: [String] = []
    if let itemsArray = itemsArray
    {
        for (item) in itemsArray
        {
           let videoId: String? = item.objectForKey("id")?.objectForKey("videoId") as? String
           if (videoId != nil)
           {
              videoIdArray.append(videoId!)
           }
         }
    }
    • Hola, estoy usando el mismo código para recuperar objetos de valor a partir de un NSDictionary, pero muestra un error. Hay alguna nueva actualización en swift 3?
    • ¿Cuál es el error que está recibiendo ?

Dejar respuesta

Please enter your comment!
Please enter your name here