2010-10-21 10 views
10

Al crear subclases en el objetivo-c, ¿cómo puedo reenviar una llamada a la superclase en el caso de un método varónico? ¿Por qué debería reemplazar el ??? a continuación para enviar todos los objetos que obtuve?Anulando un método variódico en objetivo-c

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

Respuesta

7

No puede. Para pasar con seguridad todos los argumentos variados, necesita un método para aceptar un va_list.

En estupendo,

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

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

Y el uso de [super appendObjectsWithArguments:vl] cuando se reemplaza el método en la subclase.

0

Prueba esto:

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

Si eso no hace el truco, leer las páginas del manual sobre varargs.

+1

Eso no va a funcionar, se acaba de pasar "args" como un único parámetro para appendObjects (y probablemente causar un fallo en el negocio). –

Cuestiones relacionadas