Domanda

ho a che fare con un vecchio progetto di iPhone OS 2.x e voglio mantenere la compatibilità, mentre la progettazione per 3.x.

Sto usando NSInvocation, è un codice come questo

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];

per avere un codice in un modo che sia 3.0 e 2.0 come, ognuno con la sua sintassi corretta.

Sto avendo un problema sulla linea ho segnato con punti interrogativi.

Il problema è che sto cercando di assegnare ad arg2 una costante che non è stato definito in OS 2.0. Come tutto con NSInvocation è quello di fare cose indirettamente per evitare errori di compilazione, come faccio a questo set costante ad una variabile in modo indiretto? Una sorta di performSelector "assegnare il valore alla variabile" ...

è possibile? Grazie per qualsiasi aiuto.

È stato utile?

Soluzione

UITableViewCellStyleDefault è definito come 0 modo da poter utilizzare 0 ovunque si usa normalmente UITableViewCellStyleDefault. Inoltre, non v'è alcuna necessità di utilizzare un NSInvocation, questo farà:

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:] continuerà a lavorare su 3.x, è solo sconsigliato.

Altri suggerimenti

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  
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top