Objective-c - передача переменных в метод переменной длины - PullRequest
4 голосов
/ 11 марта 2010

У меня есть массив с элементами, и я хочу передать их в метод переменной длины. Как ты это делаешь?

Т.е., у меня есть это (например):

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 ]

16 голосов
/ 11 марта 2010

Документация для параметра 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];
}
4 голосов
/ 11 марта 2010
- (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);
}

Вы также можете просто указать аргумент в своих функциях, который принимает массив (простое решение)

В любом случае запись ... предназначена для переменного количества аргументов в конце функции.

...