Objective-c - 将变量传递给可变长度方法

时间:2010-03-11 14:33:40

标签: objective-c variable-length

我有一个包含项目的数组,我想将它们传递给一个可变长度的方法。你是怎么做到的?

即,我有这个(例如):

NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];

[[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:[array objectAtIndex:0] otherButtonTitles:[array objectAtIndex:1], [array objectAtIndex:2], nil];

但是想象一下,数组可能有一个可变长度的项目,所以你不能像这样硬编码。

2 个答案:

答案 0 :(得分:16)

otherButtonTitles-[UIAlertView initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:]参数的文档说明:

  

使用此参数相当于调用addButtonWithTitle:使用此标题添加更多按钮。

你试过这个:

NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
UIAlertView *view = [[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil];
for (NSString *s in array) {
    [view addButtonWithTitle:s];
}

答案 1 :(得分:4)

- (id) initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles ...
{
    va_list args;
    va_start(args, otherButtonTitles);
    for (NSString *arg = otherButtonTitles; arg != nil; arg = va_arg(args, NSString*))
    {
        //do something with nsstring
    }
    va_end(args);
}

您也可以在函数中创建一个接受数组的参数(简单解决方案)

无论如何,......符号表示函数末尾的可变数量的参数。