0

我有一个简单的方法来检查视图的超级视图,并返回一个 BOOL。然而,该方法间歇性地无法产生正确的答案(或者至少是我期望的答案)。

方法是:

-(BOOL) isTheViewShowing
{
    return (BOOL) [theView superview];
}

有一个点击手势可以删除视图,我记录了以下内容(当发生不希望的情况时):

isTheViewShowing: NO
theView: <UIView: 0x3c1a10; frame = (0 232; 320 135); clipsToBounds = YES; layer = <CALayer: 0x365480>>,
superView: <UIView: 0x392400; frame = (0 0; 320 367); autoresize = W+H; layer = <CALayer: 0x35fe90>>

如日志所示,superView 存在,但为什么演员表失败了?

4

1 回答 1

7

超级视图:<UIView:0x392400

注意低位字节superview为0x00。我还没有真正研究过当您尝试将指针强制转换为 a 时会发生什么BOOL,但由于 aBOOL本质上是 achar如果编译器只查看低位字节,我一点也不感到惊讶。试试这个:

-(BOOL) isTheViewShowing
{
    return ([theView superview] != nil);
}

这在两个方面更好:1)它确实有效,2)它更好地传达了你想要做的事情。

于 2012-09-24T01:01:34.783 回答