iphone - mit NSInvocation: konstanter Wert
-
18-09-2019 - |
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.
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