2012-01-25 9 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 

私はNSMutableString:appendFormatを呼び出すためにva_listのか、va_startマクロを使用する方法は考えています。これはどうすればできますか?

+0

この質問にこの答えを便利かもしれませんします。http: //stackoverflow.com/questions/2137752/objective-c-va-list-and-selectors –

答えて

5

ええ:

あなたの方法は、しかし、次のように書き換えることができます。 -appendFormat:は(va_list。)ではない可変長引数リスト、可変長引数を取り、あなたが代わりにこれを行う必要がありますので、引数リストを取るNSMutableStringには、単一の方法がありません:

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); 
} 
関連する問題