iOS:使用performSelector的setUserInteractionEnabled在64位上不起作用

时间:2014-04-03 20:19:46

标签: ios 64-bit user-interaction performselector

如果您尝试

 [self.view performSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:YES] afterDelay:2];
64位 iPhone (即使在模拟器上)将禁用用户互动。无论以前的状态如何。

此行适用于 32位 iPhone。

这是操作系统中的错误吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

setUserInteractionEnabled:需要一个BOOL参数,但您发送的是NSNumber。您的代码在32位环境中偶然发挥作用,但

 [self.view performSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:NO] afterDelay:2];
即使在32位(当我测试它时),

也不会将属性重置为NO,所以确实如此 没有真正的工作。

解决此问题的最简单方法是使用GCD:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    self.view.userInteractionEnabled = YES;
});

答案 1 :(得分:2)

实际上,第一个参数不是NSNumber,而是BOOL。 只需将其重构为:

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self.view setUserInteractionEnabled:YES];
});