将NSNumber转换为布尔值可为iPhone和iPad提供不同的结果

 爱文小宝的贇 发布于 2022-12-07 12:53

我正在使用选择器来更改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时,它在两个设备上都能正常工作.但是这种行为的原因是什么?

1 个回答
  • 你的代码完全破碎了.

    您正在将NSNumber传递给期望BOOL的方法.那是垃圾.为什么你会期望这个工作?把一个id和铸造给BOOL就像垃圾一样.您不能将对象强制转换为BOOL并期望有意义的东西.

    您需要一个带有NSNumber*参数的方法,然后使用boolValue.

    或者摆脱那个performSelector垃圾并改为使用一个块.

    看看GCD,尤其是dispatch_after,可以更清晰地处理这种情况.

    2022-12-11 03:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有