Frage

ich mit einem alten iPhone OS 2.x Projekt befasse und ich möchte Kompatibilität halten, während für 3.x zu entwerfen.

I NSInvocation verwenden, ist ein Code wie folgt

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

einen Code in einer Art und Weise zu haben, die beide 3.0 und 2.0 wie jeder seine richtige Syntax.

ich habe ein Problem auf der Linie I mit Fragezeichen markiert.

Das Problem ist, dass ich versuche, eine Konstante zuweisen arg2, die nicht in OS 2.0 definiert wurde. Da alles mit NSInvocation Zeug ist indirekt zu tun Compiler-Fehler zu vermeiden, wie richte ich dies auf indirekte Weise zu einer Variablen konstant? Irgendeine Art von perform „zuweisen Wert der Variablen“ ...

ist das möglich? Dank für jede Hilfe.

War es hilfreich?

Lösung

UITableViewCellStyleDefault als 0 definiert, so dass Sie 0 verwenden können, wo immer Sie normalerweise UITableViewCellStyleDefault verwenden würden. Auch besteht keine Notwendigkeit, eine NSInvocation zu verwenden, dies zu tun:

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:] noch auf 3.x arbeiten, es ist nur veraltet.

Andere Tipps

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  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top