La conversión de NSData a NSString devuelve cero

Sé que esta pregunta se hizo antes, pero ninguna de las soluciones funcionó para mí. Estoy tratando de convertir un object NSData a un valor NSString . Estoy iniciando el object NSString como sigue:

 NSString *html = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 

Pero el html es siempre nil . El NSData que estoy tratando de convertir es el código fuente de un website. Es bastante largo Esto es 'NSData` que estoy tratando de convertir.

¿Es la longitud de los datos lo que está causando el problema? Necesito el código fuente como una cadena. ¿Qué puedo hacer para resolver este problema? Lo que he intentado hasta ahora:

  • Probado con todos los formattings de encoding como se muestra en esta respuesta.
  • Intentado con [NSString stringWithUTF8String:[urlData bytes]];

Pero lo que sea que produzca el mismo resultado. html siempre es nil todo lo que hago.

EDITAR

Fue un problema con la console de debugging. Incluso cuando los objects tenían valores, la console de debugging siempre mostraba nulo como valor para la mayoría de los objects. Sin embargo, NSLog siempre muestra el valor.

No es un problema con el debugger
El problema proviene de la optimization del comstackdor, el comstackdor ve que la cadena no se utilizó directamente y optimiza el código eliminándolo y pasándolo directamente a otro método.

La key del problema : está ejecutando un proyecto en el esquema de release

Solución:
Aquí hay una pequeña guía para cambiar de proyecto al esquema de Debug

1) Haga clic en el objective y click Edit scheme...

introduzca la descripción de la imagen aquí

2) Aparecerá un popup

introduzca la descripción de la imagen aquí

3) Haga clic en Run %Your project%
4) Ventana emergente Abrir configuration de compilation
5) Seleccione Debug
5) Presione OK
6) ¡Estás listo para ir !, ahora puedes depurar cualquier cosa 🙂

Si está utilizando ARC y acaba de escribir el código que convierte los datos en una cadena y aún no ha escrito ningún código que realmente use la cadena, se desasignará inmediatamente. Comtesting si eso es lo que está sucediendo. Por ejemplo, ¿qué muestra NSLog (@ "% @", html)?

 NSAttributedString *str = [[NSAttributedString alloc] initWithData:data options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:nil error:&error]; 

Prueba esta:

  NSString *myString = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding]; 

Generalmente, la conversión de NSData a NSString devuelve nil significa que existe una discrepancia entre el formatting de encoding recibido del server y el enfoque utilizado para la encoding.