具有未知参数数量的Objective-c方法

jim*_*imj 3 objective-c

我正在编写一个针对appendFormat:内部使用的NSMutableString的类别.

@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
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用va_list或va_start来调用NSMutableString:appendFormat.如何才能做到这一点?

Jon*_*pan 5

好吧,是的.-appendFormat:采用可变参数,而不是可变参数列表(va_list.)没有单一的方法NSMutableString可以采用参数列表,所以你应该这样做:

NSString *formatted = [[NSString alloc] initWithFormat: format arguments: args];
if (formatted) {
    [self appendString: formatted];
    [formatted release];
}
Run Code Online (Sandbox Code Playgroud)