0

我正在调用一个带有布尔值的块。根据调试器,布尔值是假的,但它似乎被视为真。这是编译器/Xcode 错误,还是我应该以类似于的方式标记传递给块的参数__block

// Hovering over the |finished| parameter displays the value of finished as NO
[self.repDataSynchronizationClient synchronizeWithRepId:rep.id andCompletion:^(NSString * progressMessage, BOOL finished){
    if( finished )
    {
        [self hideLoader];    // Breakpoint set here, which I am hitting
    }
    else
    {
        [self setLoaderTitle:progressMessage];
    }
}];

这是情况的屏幕截图,显示了断点命中和工具提示。

4

1 回答 1

5

如果您处于发布状态而不是调试状态,则很可能只是断点错误。这可能是由于编译器删除了发布中的一些语句,如优化和行号不再与它们应该的代码对齐。

验证您的 if 语句使用语句到达的子句NSLog


在单独的说明中,您提到了 的使用__block,但实际上并没有使用它,并且似乎在那里有一个保留周期。它可能应该是:

__block id selfReference = self;
[self.repDataSynchronizationClient synchronizeWithRepId:rep.id andCompletion:^(NSString* message, BOOL finished) {
    if (finished)
    {
        [selfReference hideLoader];
    }
    else 
    {
        [selfReference setLoaderTitle:progressMessage];
    }
}];

如果使用 ARC,请__unsafe_unretained使用__block.

于 2012-08-01T18:09:40.777 回答