2012-03-05 11 views
5

Estoy tratando de extender una clase que tiene un método variadic tales como:Cómo reemplazar un método variadic en Objective-C

- (void)someMethod:(id)arguments, ... ; 

y en la subclase anularla mediante una llamada al método original como:

- (void)someMethod:(id)arguments, ... { 
    [super someMethod:arguments, ...]; 

    // override implementation 
    ... 
} 

pero esto no funciona. Alguien sabe cómo trabajar esto? Gracias.

+0

Entonces ... ¿Es esta una categoría, o una superclase? Porque las categorías EXTEND y superclasses OVERSEE. – CodaFi

+0

anular en una subclase. –

+0

Generalmente, no es posible ajustar una función o método varódico como este. –

Respuesta

3

similar a printf/vprintf, la base declararía:

- (void)someMethod:(id)arguments, ... ; 

la subclase implementaría:

- (void)vsomeMethod:(id)arguments vaList:(va_list)vaList; 

continuación, la base sería simplemente llamar vsomeMethod:vaList: en el cumplimiento de someMethod:vaList:.

+0

Gracias, pero en mi caso la clase base no se puede modificar. –

+2

@TaketoSano sería como implementar una función variadica, pero reenviaría 'va_list' a' vsomeMethod: vaList: 'después de crearlo, en lugar de enumerar los argumentos. ya que no puede modificar la base, este enfoque no funcionará para usted porque 'baseMedición debe definir 'algunaMétodo:' para poder avanzar correctamente. las únicas "soluciones temporales" que conozco están definidas por la implementación. – justin

+0

ok, gracias por su respuesta. –

Cuestiones relacionadas