UIView.superView(BOOL)==失败

TMa*_*ver 0 casting boolean objective-c uiview ios

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

方法是:

-(BOOL) isTheViewShowing
{
    return (BOOL) [theView superview];
}
Run Code Online (Sandbox Code Playgroud)

有一个删除视图的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>>
Run Code Online (Sandbox Code Playgroud)

由于日志显示superView存在,但为什么演员表失败?

Cal*_*leb 7

superView:<UIView:0x392400

注意,低位字节superview是0x00.我还没有真正研究当你尝试将指针转换为a时会发生什么BOOL,但是因为a BOOL本质上是一个char我不会感到惊讶,如果编译器只是查看低位字节.试试这个:

-(BOOL) isTheViewShowing
{
    return ([theView superview] != nil);
}
Run Code Online (Sandbox Code Playgroud)

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