iphone - utilise NSInvocation: valeur constante
-
18-09-2019 - |
Question
Je traite avec un ancien iPhone OS 2.x projet et je veux garder la compatibilité, lors de la conception pour 3.x.
J'utilise NSInvocation, est un code comme ceci
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];
d'avoir un code d'une manière à la fois 3,0 et 2,0 comme, chacun utilisant la syntaxe appropriée.
J'ai un problème sur la ligne que j'ai marqué des points d'interrogation.
Le problème est que je suis en train de céder à arg2, une constante qui n'a pas été défini dans OS 2.0. Comme tout avec NSInvocation est de faire des choses indirectement pour éviter les erreurs du compilateur, comment puis-je configurer cette constante à une variable d'une manière indirecte? Une sorte de performSelector "attribuer une valeur à la variable" ...
est-ce possible? Merci pour toute aide.
La solution
UITableViewCellStyleDefault
est défini comme 0
afin que vous puissiez utiliser 0
où que vous utilisez normalement UITableViewCellStyleDefault
. En outre, il n'y a pas besoin d'utiliser un NSInvocation, cela fera:
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:]
va encore travailler sur 3.x, il est juste dépréciée.
Autres conseils
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