>我有一个简单的方法来检查视图的超级视图,并返回一个布尔值。 但是,该方法间歇性地无法产生正确的答案(或者至少是我期望的答案)。
方法是:
-(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)它更好地传达了你想要做的事情。