BOOL属性返回错误的BOOL结果

3

一个BOOL属性返回NO,尽管它的后备iVar显示为Yes

问题

我有一个类PFIBinaryPointView,其中包含一个BOOL属性:

@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)];
    });
});

但是,无论它的备用iVar指示它是(应该是) YES isGlowing 始终返回 NO

IMAGE

我尝试过的:

  • 起初我以为这是一个Kiwi问题,但然后我测试插入一个辅助BOOL BOOL test = point.isGlowing; 但是 test也一直是NO
  • 我尝试使用NSLog语句记录它是否有任何差异 -> 总是 No 0
  • 我仔细检查了PFIBinaryPointView类是否存在隐式声明的iVar。但是我使用默认的getter和setter,并且没有任何地方使用@synthesize
  • 我尝试重命名属性。在此之前,它被称为isActive
  • 我对整个项目进行了清理。
  • 我多次重新启动了Xcode。

因此,如果有人能够解释这种奇怪的行为,请告诉我,或者更好地告诉我如何使属性返回正确的结果。


苹果公司“有用”的自动生成合成功能又在期刊上写下了一个成功故事。人们何时才会意识到明确表达可能需要更多的按键,但至少他们知道正在发生什么... - trojanfoe
只需删除 getter=isGlowing,我相信它会正常工作。或者,您可以在 @implementation 中添加 @synthesize glowing = _glowing。 (个人而言,我从不使用 _getter=_,我看不出有什么意义) - nielsbot
@trojanfoe,你能详细解释一下问题吗?Pfitz,你能否在一个更小、自包含的代码片段上重现这个问题吗? - zoul
1
你尝试过在调试器控制台或使用NSLog打印实例变量_glowing的值吗?有时候调试器变量视图会显示错误的数据。 - Martin R
1
@zoul 在Xcode中,变量面板经常会出现问题。(lldb)控制台可能更准确。我建议尝试使用$ (lldb) p (int) point.isGlowing - CouchDeveloper
显示剩余3条评论
2个回答

1

请尝试查看帧变量point._glowing并报告其内容,谢谢。

如果它给出错误信息,请提交错误报告

如果它给出正确信息,请右键点击_glowing iVar,并编辑其摘要。我猜测“YES”将会在结果窗口中显示。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接