2012-01-25 39 views
3

我正在爲內部使用appendFormat:的NSMutableString編寫一個類別。具有未知參數個數的Objective-c方法

@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。如何才能做到這一點?

+0

這這個問題的答案可能是有用的:HTTP: //stackoverflow.com/questions/2137752/objective-c-va-list-and-selectors –

回答

5

好耶。 -appendFormat:採用可變參數,而不是一個可變參數的參數列表有一個需要參數列表,所以你應該這樣做,而不是在NSMutableString沒有單一的方法(va_list):

NSString *formatted = [[NSString alloc] initWithFormat: format arguments: args]; 
if (formatted) { 
    [self appendString: formatted]; 
    [formatted release]; 
} 
4

你不能這樣做。 appendFormat:接受可變參數(參數本身),而不是va_list結構。在C中,不可能傳遞可變參數。

你的方法,但是,可以寫成這樣:

- (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); 
} 
相關問題