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存在,但为什么演员表失败?
superView:<UIView:0x392400
注意,低位字节superview
是0x00.我还没有真正研究当你尝试将指针转换为a时会发生什么BOOL
,但是因为a BOOL
本质上是一个char
我不会感到惊讶,如果编译器只是查看低位字节.试试这个:
-(BOOL) isTheViewShowing
{
return ([theView superview] != nil);
}
Run Code Online (Sandbox Code Playgroud)
这有两个方面更好:1)它实际上有效,2)它更好地传达你想要做的事情.
归档时间: |
|
查看次数: |
338 次 |
最近记录: |