Библиотека разработчика OS X показывает, как создать метод, который принимает переменное число аргументов, в следующей технической статье: http://developer.apple.com/library/mac/#qa/qa1405/_index.html.
Я пытаюсь выяснить, возможно ли разделить существующую реализацию метода, которая принимает переменные аргументы, и вызвать реализацию суперкласса.
Используя UIActionSheet в качестве примера, посмотрите на код ниже. Вызов метода initWithTitle суперкласса передает только первый 'otherButtonTitle'. Я не знаю, как передать оставшиеся строки, содержащиеся в списке аргументов переменной.
// MyActionSheet.m
- (id)initWithTitle:(NSString *)title
delegate:(id < UIActionSheetDelegate >)delegate
cancelButtonTitle:(NSString *)cancelButtonTitle
destructiveButtonTitle:(NSString *)destructiveButtonTitle
otherButtonTitles:(NSString *)otherButtonTitles, ...
{
// this calls the superclass initWithTitle: method but does not
// pass NIL terminated list of strings
self = [super initWithTitle:title
delegate:delegate
cancelButtonTitle:cancelButtonTitle
destructiveButtonTitle:destructiveButtonTitle
otherButtonTitles:otherButtonTitles, nil];
if (self) {
// custom initialization
}
return self;
}
Я могу получить аргументы, используя va_list, va_start, va_end, но не знаю, как передать их в метод суперкласса.
В случае, если у кого-нибудь возникнет искушение сказать мне, что я могу сделать это по-другому (например, не передавайте переменные args, но используйте va_list, va_start, va_end для создания массива строк и вызывайте addButtonWithTitle: несколько раз, я Я знаю, что могу это сделать. Я использовал UIActionSheet в качестве примера. Есть и другие случаи, когда была бы полезна возможность подкласса метода с переменными аргументами, и я хотел бы узнать, как сделать именно то, что я просил, если это возможно .
спасибо!