UIView.superView(BOOL)==失败

时间:2012-09-24 00:52:11

标签: objective-c ios uiview casting boolean

我有一个简单的方法来检查视图的超级视图,并返回一个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存在,但为什么转换失败?

1 个答案:

答案 0 :(得分:7)

  

superView:&lt; UIView:0x392400

请注意superview的低位字节为0x00。我还没有真正研究当你试图将指针强制转换为BOOL时会发生什么,但由于BOOL本质上是char,所以我不会感到惊讶编译器只是查看低位字节。试试这个:

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

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