2011-03-30 10 views
24

tengo el siguiente fragmento de código en mi Xcode:Usando NSLog para la depuración

NSString *digit [[sender titlelabel] text]; 
NSLog([digit]); 

Traté de construir la aplicación y estoy recibiendo el siguiente mensaje de advertencia para la línea NSLog([digit]);

Warning: Format not a string literal and no format arguments 

Puede usted aconsejarme cómo puedo resolver este mensaje de advertencia? ¿Qué significa realmente el mensaje?

Respuesta

49

probar este pedazo de código:

NSString *digit = [[sender titlelabel] text]; 
NSLog(@"%@", digit); 

El mensaje significa que tiene una sintaxis incorrecta para usar la variable digit. Si no le envía ningún mensaje, no necesita ningún paréntesis.

+0

Hmmm, ¿por qué no puede usted sólo tiene que pasar en NSLog (dígitos) directamente? Creo que dará lugar a una advertencia, pero ¿por qué? –

+0

Si te acostumbras a pasar objetos NSString directamente, desarrollarás el hábito de hacerlo. Y a veces puede pasar no el objeto, sino un tipo primitivo como float o int que hará explotar su aplicación en el punto de inicio de sesión. – Eimantas

+1

@mingyeow También es un riesgo de seguridad pasar una cadena de formato no literal. Muchos sistemas se han visto comprometidos de esta forma, llamando a printf en una cadena de formato que fue pasada por un atacante. – bugloaf

4

¿Por qué tiene los soportes alrededor de digit? Debe ser

NSLog("%@", digit);

También se está perdiendo una = en la primera línea ...

NSString *digit = [[sender titlelabel] text];

3
NSLog(@"%@", digit); 

¿Qué se muestra en la consola?

3

La forma correcta de utilizar NSLog, como la advertencia trata de explicar, es el uso de un formateador, en lugar de pasar en un literal:

En lugar de:

NSString *digit = [[sender titlelabel] text]; 
NSLog(digit); 

Uso:

NSString *digit = [[sender titlelabel] text]; 
NSLog(@"%@",digit); 

Seguirá funcionando de esa manera, pero hacerlo de esta manera eliminará la advertencia.

+0

Hmmm, desde xcode, veo que NSLog espera un formato (NSString *, ...).¿Qué significa exactamente el formato *? –

+1

@ming yeow - Esta es la autocompleta que le indica que el primer parámetro de la función es un NSString, 'format' es el nombre del parámetro que usan como ejemplo para indicarle que debe ser un 'NSString' formateado. El '...' es una lista de valores separados por comas que se pasarán al formato 'NSString'. Por ejemplo, si pongo 'NSLog (@" Pasaste% i y% i ", 4,5);' saldrá en la consola: 'Pasaste 4 y 5'. –

23

Uso NSLog() así:

NSLog(@"The code runs through here!"); 

O como esto - con marcadores de posición:

float aFloat = 5.34245; 
NSLog(@"This is my float: %f \n\nAnd here again: %.2f", aFloat, aFloat); 

En NSLog() que puede usarlo como + (id)stringWithFormat:(NSString *)format, ...

float aFloat = 5.34245; 
NSString *aString = [NSString stringWithFormat:@"This is my float: %f \n\nAnd here again: %.2f", aFloat, aFloat]; 

Se pueden añadir otros marcadores de posición , también:

012 tipo
float aFloat = 5.34245; 
int aInteger = 3; 
NSString *aString = @"A string"; 
NSLog(@"This is my float: %f \n\nAnd here is my integer: %i \n\nAnd finally my string: %@", aFloat, aInteger, aString); 
1

: BOOL DATOS (SI/NO) O (1/0)

BOOL dtBool = 0; 

O

BOOL dtBool = NO; 
NSLog(dtBool ? @"Yes" : @"No"); 

SALIDA: NO

tipo: Long

long aLong = 2015; 
NSLog(@"Display Long: %ld”, aLong); 

SALIDA: muestra Largo: 2015

long long veryLong = 20152015; 
NSLog(@"Display very Long: %lld", veryLong); 

SALIDA: muestra muy larga: 20152015

Tipo: Cadena

NSString *aString = @"A string"; 
NSLog(@"Display string: %@", aString); 

SALIDA: Mostrar cadena: una cadena

Tipo: Flotador

float aFloat = 5.34245; 
NSLog(@"Display Float: %F", aFloat); 

SALIDA: isplay flotador: 5,342450

tipo: Entero

int aInteger = 3;  
NSLog(@"Display Integer: %i", aInteger); 

SALIDA: Visualizar Entero: 3

NSLog(@"\nDisplay String: %@ \n\n Display Float: %f \n\n Display Integer: %i", aString, aFloat, aInteger); 

SALIDA: de la secuencia: una cadena

Display Float: 5,342450

Visualización de enteros: 3

http://luterr.blogspot.sg/2015/04/example-code-nslog-console-commands-to.html