我正在使用选择器来更改View项目的可见性
[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时,它在两个设备上都能正常工作.但是这种行为的原因是什么?
你的代码完全破碎了.
您正在将NSNumber传递给期望BOOL的方法.那是垃圾.为什么你会期望这个工作?把一个id和铸造给BOOL就像垃圾一样.您不能将对象强制转换为BOOL并期望有意义的东西.
您需要一个带有NSNumber*参数的方法,然后使用boolValue.
或者摆脱那个performSelector垃圾并改为使用一个块.
看看GCD,尤其是dispatch_after,可以更清晰地处理这种情况.