2010-10-21 3 views
10

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

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

ответ

7

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

0

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

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

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

+1

Это не будет работать, он просто будет проходить «арг» в качестве единственного параметра appendObjects (и, вероятно, вызовет сбой в придачу). –

 Смежные вопросы

  • Нет связанных вопросов^_^