UIView.superView (BOOL) == Fail



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

方法是:

-(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 的低位字节是0x00。我还没有真正研究过当你尝试将指针投射到BOOL时会发生什么,但由于BOOL本质上是一个char,如果编译器只看低阶字节,我一点也不会感到惊讶。试试这个:

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

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

最新更新