首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS:带performSelector的setUserInteractionEnabled在64位上不工作

iOS:带performSelector的setUserInteractionEnabled在64位上不工作
EN

Stack Overflow用户
提问于 2014-04-03 20:19:45
回答 2查看 369关注 0票数 1

如果你试着

代码语言:javascript
复制
 [self.view performSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:YES] afterDelay:2];

64位 iPhone (甚至在模拟器上),用户交互将被禁用。不管以前的状态如何。

不过,这一行可以在32位 iPhones上工作。

,这是操作系统中的一个bug吗?我错过了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-03 20:35:05

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

代码语言:javascript
复制
 [self.view performSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:NO] afterDelay:2];

即使在32位(当我测试它时),也不会将属性重置为NO,因此它并不真正工作。

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

代码语言:javascript
复制
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    self.view.userInteractionEnabled = YES;
});
票数 3
EN

Stack Overflow用户

发布于 2014-04-03 20:36:11

实际上,第一个param不是NSNumber,而是BOOL。将其重构为:

代码语言:javascript
复制
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];
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22848151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档