Pregunta

Estoy tratando con un proyecto de edad 2.x iPhone OS y quiero mantener la compatibilidad, mientras que el diseño de 3.x.

Estoy utilizando NSInvocation, es un código como este

NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:
       [cell methodSignatureForSelector:
                                    @selector(initWithStyle:reuseIdentifier:)]];
[invoc setTarget:cell];
[invoc setSelector:@selector(initWithStyle:reuseIdentifier:)];
int arg2 = UITableViewCellStyleDefault;  //????
[invoc setArgument:&arg2 atIndex:2];
[invoc setArgument:&identificadorNormal atIndex:3];
[invoc invoke];

tener un código de una manera que ambos 3,0 y 2,0 como, cada uno usando su sintaxis correcta.

Estoy teniendo un problema en la línea he marcado con signos de interrogación.

El problema es que estoy tratando de asignar a arg2, una constante que no ha sido definido en OS 2.0. Como todo con NSInvocation es hacer cosas indirectamente, para evitar errores de compilación, cómo fijo esta constante a una variable de una manera indirecta? Una especie de performSelector "asignar un valor a la variable" ...

es posible? Gracias por cualquier ayuda.

¿Fue útil?

Solución

UITableViewCellStyleDefault se define como 0 esta manera puede utilizar 0 donde se suele utilizar UITableViewCellStyleDefault. Además, no hay necesidad de utilizar un NSInvocation, esto va a hacer:

UITableViewCell *cell = [UITableViewCell alloc];
if ([cell respondsToSelector:@selector(initWithStyle:reuseIdentifier:)])
    cell = [(id)cell initWithStyle:0 reuseIdentifier:reuseIdentifier];
else
    cell = [cell initWithFrame:CGRectZero reuseIdentifier:reuseIdentifier];

-[UITableViewCell initWithFrame:reuseIdentifier:] todavía funcionará en 3.x, sólo es obsoleto.

Otros consejos

NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:
       [cell methodSignatureForSelector:
                                    @selector(initWithStyle:reuseIdentifier:)]];
[invoc setTarget:cell];
[invoc setSelector:@selector(initWithStyle:reuseIdentifier:)];

int arg2;

#if (__IPHONE_3_0)
arg2 = UITableViewCellStyleDefault;
#else
//add 2.0 related constant here
#endif  

[invoc setArgument:&arg2 atIndex:2];
[invoc setArgument:&identificadorNormal atIndex:3];
[invoc invoke];


#if (__IPHONE_3_0)
arg2 = UITableViewCellStyleDefault;
#endif  
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top