Cocoa中的变量参数列表

时间:2013-05-25 14:34:24

标签: objective-c cocoa

我有这样的代码:

- (NSArray *)executeSqlWithParameters:(NSString *)sql, ...
{

    va_list argumentList;
    va_start(argumentList, sql);

    NSMutableArray *arguments = [NSMutableArray array];

    id argument;
    while(argument == va_arg(argumentList, id))
    {
        [arguments addObject:argument];
    }
    va_end(argumentList);

    NSLog(@"arguments %@",arguments); // here i have an empty array

    return [self executeSql:sql withParameters:arguments];

}

我正在调用这个方法:

NSArray *results = [self.dataBaseManager executeSqlWithParameters:@"SELECT * from InfoTable number = ?",[NSNumber numberWithInt:5], nil];

但是当我在executeSqlWithParameters方法中记录arguments数组时,它是emty。 我做错了什么?感谢

1 个答案:

答案 0 :(得分:7)

你这条线上只有一个小错字:

while(argument == va_arg(argumentList, id))

你想要的是:

while(argument = va_arg(argumentList, id))

或等效地,避免编译器警告:

while ((argument = va_arg(argumentList, id)) != nil)