Переопределение метода вариации в target-c - PullRequest
10 голосов
/ 21 октября 2010

При создании подклассов в target-c, как я могу переадресовать вызов суперклассу в случае использования метода с вариацией. На что я должен заменить ??? ниже, чтобы отправить все объекты, которые я получил?

- (void) appendObjects:(id) firstObject, ...
{
   [super appendObjects: ???];
}

Ответы [ 3 ]

7 голосов
/ 21 октября 2010

Вы не можете. Чтобы безопасно передать все переменные аргументы, вам нужен метод для принятия va_list.

В супер,

-(void)appendObjectsWithArguments:(va_list)vl {
  ...
}

-(void)appendObject:(id)firstObject, ...
  va_list vl;
  va_start(vl, firstObject);
  [self appendObjectsWithArguments:vl];
  va_end(vl);
}

И используйте [super appendObjectsWithArguments:vl] при переопределении метода в подклассе.

1 голос
/ 07 февраля 2011
0 голосов
/ 21 октября 2010

Попробуйте это:

- (void) appendObjects:(id) firstObject, ...
{
   va_list args = &firstObject;
   [super appendObjects: args];
}

Если это не сработает, прочитайте справочные страницы по varargs.

...