iphone - utilizzando NSInvocation: valore costante
-
18-09-2019 - |
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.
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