Supongamos que tengo un método con la firma:¿Cuál es la forma correcta de ajustar [NSString stringWithFormat:]?
+ (NSString *) myFormattedString:(NSString *)format, ...;
Y quiero que antepone una cadena de mi elección (por ejemplo, @ "Foo"). Supongo que la mejor manera es usar [myString initWithFormat: arguments:], pero ¿cómo implementarías este método?
He intentado hacer lo siguiente, pero me da la advertencia como se especifica en el comentario:
+ (NSString *) myFormattedString:(NSString *)format, ... {
char *buffer;
[format getCString:buffer maxLength:[format length] encoding:NSASCIIStringEncoding];
va_list args;
va_start(args, buffer); // WARNING: second parameter of 'va_start' not last named argument
NSString *str = [[NSString alloc] initWithFormat:format arguments:args];
[str autorelease];
return [NSString stringWithFormat:@"Foo: %@.", str];
}
La razón por la que estoy asumiendo va_start() puede tomar en un (char *) es por el ejemplo que vi en el
manual page of STDARG(3). Siéntase libre de reescribir completamente el método si lo estoy haciendo completamente mal.
Woops, no entiendo cómo funciona va_start(). Supongo que http://numbergrinder.com/node/35 no lo explica con suficiente claridad. Pensé que el segundo parámetro para va_start() era el recuento real de cuántos params se enviaron a la función; y que tenía una 'sobrecarga' que tomaba una cadena de formato que determinaba el recuento en función de cuántos% no escapados había en la cadena de formato ... Vaya, eso hace que sea mucho más fácil que no tenga que determinar el conde tú mismo. Gracias por la explicación. – Senseful