Giả sử tôi có một phương pháp với chữ ký:Cách thích hợp để bao bọc [NSString stringWithFormat:] là gì?
+ (NSString *) myFormattedString:(NSString *)format, ...;
Và tôi muốn nó thêm vào trước một chuỗi các lựa chọn của tôi (ví dụ: @ "Foo:"). Tôi đoán cách tốt nhất là sử dụng [myString initWithFormat: arguments:], nhưng làm thế nào bạn sẽ thực hiện phương pháp này?
tôi đã cố gắng làm như sau, nhưng tôi nhận được cảnh báo theo quy định tại các comment:
+ (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];
}
Lý do tôi giả va_start() có thể mất trong một (char *) là vì ví dụ tôi thấy trên
manual page of STDARG(3). Cảm thấy tự do để viết lại hoàn toàn phương pháp nếu tôi làm điều đó hoàn toàn sai.
Woops, tôi hiểu lầm cách va_start() hoạt động. Tôi đoán http://numbergrinder.com/node/35 không giải thích rõ ràng. Tôi nghĩ tham số thứ hai là va_start() là số đếm thực tế về số lượng param được gửi đến hàm; và rằng nó có một 'quá tải' trong chuỗi định dạng xác định số lượng dựa trên số lượng không thoát của% đã có trong chuỗi định dạng ... Wow giúp bạn dễ dàng hơn để xác định tự tính. Cảm ơn lời giải thích. – Senseful