iPhone - usando NSInvocation: valor constante
-
18-09-2019 - |
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.
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