我使用选择器更改了查看项目的可见性
[target performSelector:@selector(setVisible:) withObject:[NSNumber numberWithBool:YES] afterDelay:delay];
我在视图中的功能是:
- (void)setVisible:(BOOL)isVisible_
{
if (isVisible_)
{
...
}
else
{
...
}
}
此代码适用于iPhone和iPad。在iPhone中,isVisible_始终是NO。在iPad中它的工作正确。当我更改我的函数以获取id而不是BOOL,然后将其自己投射到BOOL时,它在两个设备上都能正常工作。但是这种行为的原因是什么?
答案 0 :(得分:5)
您的代码完全破碎了。
您正在将NSNumber传递给期望BOOL的方法。这是垃圾。为什么你会期望这个工作?把一个id和铸造给BOOL就像垃圾一样。你不能将一个对象转换为BOOL并期望有意义的东西。
您需要一个带有NSNumber *参数的方法,然后使用boolValue。
或者摆脱那个performSelector垃圾并改为使用一个块。
查看GCD,特别是dispatch_after,以便更清晰地处理这种情况。
答案 1 :(得分:3)
应该是:
- (void)setVisible:(NSNumber *)isVisible
{
BOOL b = [isVisible boolValue];
if (b)
{
...
}
else
{
...
}
}