iphone - usando NSInvocation: valor constante
-
18-09-2019 - |
Pergunta
Eu estou lidando com um projeto antigo 2.x iPhone OS e quero manter a compatibilidade, ao projetar para 3.x.
Eu estou usando NSInvocation, é um 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];
para ter um código de uma forma que ambos 3.0 e 2.0 como, cada um usando sua sintaxe apropriada.
Eu estou tendo um problema na linha I marcado com pontos de interrogação.
O problema não é que eu estou tentando atribuir a arg2, uma constante que não tenha sido definido no OS 2.0. Como tudo com NSInvocation é fazer coisas indiretamente para evitar erros do compilador, como faço para definir esta constante para uma variável de forma indireta? Algum tipo de performSelector "valor atribuir a variável" ...
isso é possível? obrigado por qualquer ajuda.
Solução
UITableViewCellStyleDefault
é definido como 0
assim você pode usar 0
onde quer que você usaria normalmente UITableViewCellStyleDefault
. Além disso, não há necessidade de usar um NSInvocation, isso vai fazer:
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:]
ainda vai trabalhar em 3.x, é apenas substituído.
Outras dicas
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