Как передать элементы массива переменной функции?

#objective-c #nsarray #variadic-functions

#цель-c #nsarray #variadic-функции #objective-c

Вопрос:

Я уверен, что на этот вопрос уже где-то должен быть дан ответ, но я изо всех сил пытаюсь найти правильные условия поиска для ответа.

В моем коде objective-c у меня есть NSArray с неизвестным числом строк, которые я хочу передать его элементам в метод variadic init, в данном случае это the … список ‘otherButtonTitles’ в конструкторе UIActionSheet. Как этого можно достичь?

заранее спасибо

Ответ №1:

Я думаю, вам нужно было бы передать первый элемент массива конструктору, а затем использовать метод addButtonWithTitle для перебора оставшихся элементов и добавления их:

 UIActionSheet *mySheet = [[UIActionSheet alloc] initWithTitle:title delegate:delegate cancelButtonTitle:cancelButtonTitle destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:[myOtherButtons objectAtIndex:0],nil];

NSMutableArray *otherbuttons = myOtherButtons;
[otherButtons removeObjectAtIndex:0];

NSEnumerator *enumerator = [otherButtons objectEnumerator];
id anObject;

while (title = [enumerator nextObject]) {
    [mySheet addButtonWithTitle:title];
}
  

Комментарии:

1. Наверное, я ожидал чего-то более элегантного, спасибо, работает нормально.

Ответ №2:

Общего способа сделать это не существует, но конкретно для UIActionSheet вам не нужно использовать этот конструктор.

 UIActionSheet *sheet = [[UIActionSheet alloc] init];

// set properties
sheet.title = @"Title!";

// add buttons
for (NSString *buttonTitle in otherButtonTitles) {
    [sheet addButtonWithTitle:buttonTitle];
}

sheet.cancelButtonIndex =
    [sheet addButtonWithTitle:@"Cancel"];
  

UIAlertView может быть инициализирован аналогичным образом.