1

我正在处理一个旧的 iPhone OS 2.x 项目,我想在为 3.x 设计时保持兼容性。

我正在使用 NSInvocation,是这样的代码

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

以 3.0 和 2.0 都喜欢的方式编写代码,每个代码都使用其正确的语法。

我用问号标记的行有问题。

那里的问题是我试图分配给 arg2,一个在 OS 2.0 中没有定义的常量。由于 NSInvocation 的一切都是间接地做一些事情以避免编译器错误,我如何以间接的方式将此常量设置为变量?某种performSelector“为变量赋值”......

那可能吗?谢谢你的帮助。

4

2 回答 2

1

UITableViewCellStyleDefault被定义为0这样您就可以0在通常使用的任何地方使用UITableViewCellStyleDefault. 此外,不需要使用 NSInvocation,这样可以:

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:]仍可在 3.x 上运行,只是已弃用。

于 2010-03-09T04:24:59.087 回答
1
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  
于 2010-03-09T04:30:39.407 回答