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.

Foi útil?

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  
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top