2010-03-23 5 views
6

Mi comprensión de las cadenas de formato de tipo printf es que puede prefijar cualquier especificador de conversión con un ancho de campo mínimo. Esto no parece funcionar para el especificador %@ de Cocoa. Ejemplo:¿El formato de estilo de impresión de Cocoa no funciona como se esperaba al usar% @ el especificador de conversión y el ancho del campo?

NSLog(@"'%[email protected]'", @"foo"); 
NSLog(@"'%5s'", [@"foo" UTF8String]); 

Salida:

… 'foo' 
… ' foo' 

es éste el comportamiento previsto?

+0

Lo reportaría como un error: https://bugreport.apple.com/ –

+0

Hecho: http://openradar.appspot.com/radar?id=213401 –

Respuesta

1

% @ es solo para object-c object. Por lo tanto, el ancho del campo no será válido, si el objeto no es NSString.

No sabía que% 5 @ está formateado para ser el mismo que% @.

+5

La función de formateo de Cocoa siempre llama a 'descriptionWithLocale:' (o 'description') en el objeto para obtener una representación de cadena. Esta representación de cadena podría ser acolchada a un ancho de campo dado. –

0

El especificador de formato% @ simplemente se reemplaza por la descripción del objeto. No hace ningún truncamiento o relleno.

+0

Exactamente. ¿No crees que es un comportamiento incorrecto? ¿O quiso decir que hay documentación que lo define como un comportamiento diferente a otros especificadores de formato? –

+0

@Nikolai: No hago ningún juicio de valor sobre si es correcto o no, simplemente dije que así fue como funcionó :). –

Cuestiones relacionadas