Метод Objective-c с неизвестным количеством параметров - PullRequest
3 голосов
/ 25 января 2012

Я пишу категорию для NSMutableString, которая использует appendFormat: внутри.

@interface NSMutableString (Additions)    
- (void)appendFormatWithLine:(NSString *)format, ...;    
@end

@implementation NSMutableString (Additions)

- (void)appendFormatWithLine:(NSString *)format, ... {
    va_list args;
    va_start(args, format);

    // **calling [self appendFormat] gives a 'EXC_BAD_ACCESS'**
    [self appendFormat:format, args];
    [self appendString:@"\r\n"];

    va_end(args);
}

@end

Я не знаю, как использовать va_list или va_start для вызова NSMutableString:appendFormat.Как это можно сделать?

Ответы [ 2 ]

5 голосов
/ 25 января 2012

Ну да.-appendFormat: принимает аргументы с переменным числом, а не список аргументов с переменным числом (va_list.) В NSMutableString нет единственного метода, который бы принимал список аргументов, поэтому вы должны сделать это вместо:

NSString *formatted = [[NSString alloc] initWithFormat: format arguments: args];
if (formatted) {
    [self appendString: formatted];
    [formatted release];
}
4 голосов
/ 25 января 2012

Вы не можете сделать это. appendFormat: принимает переменные аргументы (сами аргументы), а не структуру va_list. В Си невозможно передать переменные аргументы.

Ваш метод, однако, может быть переписан так:

- (void)appendFormatWithLine:(NSString *)format, ...
{
    va_list args;
    va_start(args, format);

    // **calling [self appendFormat] gives a 'EXC_BAD_ACCESS'**
    NSString *formatString = [[NSString alloc] initWithFormat:format arguments:args];
    [self sppendString:formatString];
    [formatString release];
    [self appendString:@"\r\n"];

    va_end(args);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...