BOOL 属性返回错误的 BOOL 结果

Posted

技术标签:

【中文标题】BOOL 属性返回错误的 BOOL 结果【英文标题】:BOOL Property is returning wrong BOOL result 【发布时间】:2013-11-11 02:37:43 【问题描述】:

BOOL 属性返回 NO,尽管它的支持 iVar 说它是 Yes

问题

我有一个带有BOOL 属性的PFIBinaryPointView 类:

@property (nonatomic, getter=isGlowing) BOOL glowing;

我正在使用 Kiwi 测试另一个类 sut。这个类的一部分是一个方法numberToDisplay: 来设置或取消设置glowing 属性。

context(@"when numberToDisplay is called", ^
    __block PFIBinaryPointView *point;
    it(@"should activate the correct points for the number 1", ^
        [sut numberToDisplay:1];
        point = [sut.binaryPoints objectAtIndex:0];
        [[theValue([point isGlowing]) should] equal:theValue(YES)];
    );
);

但是isGlowing 总是返回一个NO,尽管它的烘焙iVar 说它是(应该是)YES

我尝试过的:

起初我以为这是 Kiwi 问题,但后来我测试插入了一个帮助器 BOOL BOOL test = point.isGlowing;test 也一直是NO。 我尝试使用 NSLog 语句记录它以查看是否存在任何差异 -> 始终为 No 或 0。 我仔细检查了PFIBinaryPointView 类是否有任何隐含的 iVar 声明。但我使用默认的 getter 和 setter,也没有 @synthesize。 我试图重命名该属性。之前叫isActive。 我为孔项目做了清理工作。 我多次重启 Xcode。

因此,如果有人可以向我解释这种奇怪的行为,请这样做或更好地告诉我如何说服酒店返回正确的结果。

【问题讨论】:

Apple 的“有用的”自动生成综合功能期刊中的另一个成功案例。人们什么时候会意识到明确可能会花费按键,但至少他们知道发生了什么...... 只需删除getter=isGlowing,我希望它会起作用。或者,您可以将@synthesize glowing = _glowing 添加到您的@implementation。 (就我个人而言,我从不使用 getter=,我不明白这一点) @***foe,你能解释一下这个问题吗? Pfitz,你能在一段更小的、独立的代码上重现这个问题吗? 如果实例变量 _glowing 在调试器控制台或使用 NSLog,您是否尝试过打印该值?有时调试器变量视图只是显示错误的数据。 @zoul Xcode 中经常有关于变量窗格的问题。 (lldb) 控制台可能更准确。我会尝试$ (lldb) p (int) point.isGlowing 【参考方案1】:

能否请您尝试帧变量 point._glowing 并查看它报告的内容?

如果它对你说谎,那么是时候报告错误了

如果显示正确,请尝试右键单击 _glowing iVar,然后编辑其摘要。我怀疑结果窗口中会显示“是”。

【讨论】:

【参考方案2】:

我在一些第 3 方代码中遇到了这个问题。看起来 bool 没有在任何地方初始化,当它实际自动初始化为 false 时,xcode 假定它是 true ! (无论如何.. 初始化 bool 解决了我的问题)。

【讨论】:

以上是关于BOOL 属性返回错误的 BOOL 结果的主要内容,如果未能解决你的问题,请参考以下文章

Bool 方法返回错误值

尝试更改 Bool 属性时出现 EXC_BAD_ACCESS 错误

g++ 错误? (bool_val ? 0 : 1) 既不返回 0 也不返回 1

检查 BOOL 状态是不是足够,或者我们也应该检查错误?

出现错误:将空字符串返回到 bool [重复]

如何解决 bool 方法上的“并非所有代码路径都返回值”?