variable una referencia programacion por pasar pasaje parametros otra objetos metodos funciones funcion como iphone ios objective-c variadic-functions

iphone - una - pasar parametros por url html



¿Cómo pasar argumentos variables a otro método? (4)

He buscado en Google y he llegado a saber cómo utilizar los argumentos variables. pero quiero pasar mis argumentos variables a otro método. estoy recibiendo errores. como hacer eso ?

-(void) aMethod:(NSString *) a, ... { [self anotherMethod:a]; // i m doing this but getting error. how to pass complete vararg to anotherMethod }


¿Ha considerado configurar sus argumentos en una matriz o diccionario y codificar de forma condicional?

-(void) aMethodWithArguments:(NSArray *)arguments { for (id *object in arguments) { if ([object isKindOfClass:fooClass]) { //handler for objects that are foo [self anotherMethod:object]; } if ([object isKindOfClass:barClass]) { //and so on... [self yetAnotherMethod:object]; } } }


AFAIK ObjectiveC (al igual que C y C ++) no le proporciona una sintaxis que permita lo que tiene directamente en mente.

La solución habitual es crear dos versiones de una función. Una que puede llamarse directamente usando ... y otra llamada por otras funciones que pasan los parámetros en forma de lista_v.

.. [obj aMethod:@"test this %d parameter", 1337); [obj anotherMethod:@"test that %d parameter", 666); .. -(void) aMethod:(NSString *)a, ... { va_list ap; va_start(ap, a); [self anotherMethod:a withParameters:ap]; va_end(ap); } -(void) anotherMethod:(NSString *)a, ... { va_list ap; va_start(ap, a); [self anotherMethod:a withParameters:ap]; va_end(ap); } -(void) anotherMethod:(NSString *)a withParameters:(va_list)valist { NSLog([[[NSString alloc] initWithFormat:a arguments:valist] autorelease]); }


Creo que podrías usar macros para lograr lo mismo. Digamos que quieres pasar los argumentos variables de un Método a otro

-(void) aMethod:(NSString *) a, ... { }

Podría definir su otro ''método'' usando macro, aunque no es un método real:

#define anotherMethod(_a_,...) [self aMethod:_a_,##__VA_ARGS__]

Esta es mi solución.


No puedes pasar argumentos variadic directamente. Pero algunos de estos métodos proporcionan una alternativa a la que puede pasar un argumento va_list por ejemplo

#include <stdarg.h> -(void)printFormat:(NSString*)format, ... { // Won''t work: // NSString* str = [NSString stringWithFormat:format]; va_list vl; va_start(vl, format); NSString* str = [[[NSString alloc] initWithFormat:format arguments:vl] autorelease]; va_end(vl); printf("%s", [str UTF8String]); }