我有一个简单的方法来检查视图的超级视图,并返回一个BOOL。然而,间歇性地,该方法无法产生正确的答案(或者至少是我期望的答案)。
方法是:
-(BOOL) isTheViewShowing
{
return (BOOL) [theView superview];
}
有一个Tap Gesture可以移除视图,我记录了以下内容(当不受欢迎的情况发生时):
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存在,但为什么转换失败?
答案 0 :(得分:7)
superView:&lt; UIView:0x392400
请注意superview
的低位字节为0x00。我还没有真正研究当你试图将指针强制转换为BOOL
时会发生什么,但由于BOOL
本质上是char
,所以我不会感到惊讶编译器只是查看低位字节。试试这个:
-(BOOL) isTheViewShowing
{
return ([theView superview] != nil);
}
这在两个方面更好:1)它实际上有效,2)它更好地传达你想要做的事情。