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]);
}