NSLog solo imprime el valor correcto cuando tengo una advertencia

Obtengo valores basura al manipular algunos de mis NSString objetos. Creo que el problema se debe a mi malentendido de cómo funciona NSString en un nivel básico. A continuación, tengo un objeto que tiene un puntero de cadena como propiedad sintetizada. Cuando intento cerrar la sesión directamente, el compilador me da una advertencia, pero cierra la sesión con el valor que esperaba. En la siguiente línea, trato de registrar esa cadena de la manera correcta, pero termino recibiendo basura.

Fragmento de código

MyObject *object = [self.objects objectAtIndex:indexPath.row];
NSString *myString = object.myString;
NSLog(myString); // format not a string literal and no formal arguments
NSLog(@"formatted = %s", myString);

Salida

2011-05-16 13:06:51.137 MyProgram[917:207] thisValueIsGood
2011-05-16 13:06:51.138 MyProgram[917:207] formatted = `å

Este problema se ha extendido a otras funciones que utilizan esta cadena final. Cuando concateno esa cadena con otras cadenas, obtengo aún más basura.

preguntado el 16 de mayo de 11 a las 20:05

1 Respuestas

NSString es un objeto, en lugar de %s, Utilizar %@.

contestado el 17 de mayo de 11 a las 00:05

Entiendo. Entonces no se que %s es bueno para ... cadenas literales? Pero, ¿por qué no escribir la cadena literal en lugar de la %s ¿en lugar de? ¿Cuál es un uso práctico de %s? - JoJo

@JoJo: %s es bueno para char* cuerdas, como "this string". %@ es para objetos Objective-C, como @"this string". (La @ lo convierte en un NSString a diferencia de un char*) - Dave DeLong

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.