Si supponga Ho un metodo con la firma:Qual è il modo corretto di eseguire il wrap [NSString stringWithFormat:]?
+ (NSString *) myFormattedString:(NSString *)format, ...;
E voglio che anteporre una stringa della mia scelta (ad esempio @ "Pippo:"). Immagino che il modo migliore sia usare [myString initWithFormat: arguments:], ma come implementeresti questo metodo?
ho provato a fare la seguente, ma ho l'avviso come specificato nel commento:
+ (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 ragione per cui sto assumendo va_start() può prendere in un (char *) è a causa dell'esempio che ho visto su
manual page of STDARG(3). Sentiti libero di riscrivere completamente il metodo se lo sto facendo completamente sbagliato.
Woops, ho frainteso come va_start() funziona. Immagino che http://numbergrinder.com/node/35 non lo spieghi abbastanza chiaramente. Pensavo che il secondo parametro di va_start() fosse il numero effettivo di quanti parametri sono stati inviati alla funzione; e che aveva un 'overload' che conteneva una stringa di formato che determinava il conteggio in base al numero di caratteri senza escape nella stringa di formato ... Wow, questo rende molto più semplice non dover determinare il conto te stesso. Grazie per la spiegazione. – Senseful