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.

Était-ce utile?

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  
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top