私は、署名付きのメソッドがあると仮定します:[NSString stringWithFormat:]をラップする適切な方法は何ですか?
+ (NSString *) myFormattedString:(NSString *)format, ...;
そして、それは私の選択の文字列の前にしたい(例えば、@ "Foo:")。私は最良の方法は[myString initWithFormat:arguments:]を使うことだと思いますが、どのようにこのメソッドを実装しますか?
次のようにしてみましたが、コメントに指定されている警告が表示されます:
+ (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];
}
va_start()が(char *私は
manual page of STDARG(3)で見た例のためです。私が完全に間違っていたら、メソッドを完全に書き直してください。
私はva_start()がどのように動作するのか誤解しました。私はhttp://numbergrinder.com/node/35がそれを十分にはっきり説明していないと思う。私は、va_start()の2番目のパラメータは、関数に送られたパラメタの数の実際の数であると考えました。それはフォーマット文字列の中にエスケープされていない%がどれくらいあるかに基づいて数を決定するフォーマット文字列を取った 'オーバーロード'を持っていたこと...それはあなたが決定する必要がないあなた自身を数えてください。説明ありがとう。 – Senseful