Переопределение вариативного метода в target-c

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

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

person Thomas    schedule 21.10.2010    source источник


Ответы (2)


Вы не можете. Чтобы безопасно передать все вариативные аргументы, вам нужен метод, принимающий 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], когда вы переопределяете метод в подклассе.

person kennytm    schedule 21.10.2010

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

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

Если это не поможет, прочитайте страницы руководства по varargs.

person NSResponder    schedule 21.10.2010
comment
Это не сработает, он просто передаст args в качестве единственного параметра для appendObjects (и, вероятно, вызовет ошибку в придачу). - person Matthew Phillips; 04.01.2011