0

ビューのスーパービューをチェックし、BOOLを返す簡単なメソッドがあります。ただし、この方法では断続的に正しい答え(または少なくとも私が期待している答え)を生成できません。

方法は次のとおりです。

-(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は存在しますが、キャストが失敗するのはなぜですか?

4

1 に答える 1

7

superView: <UIView: 0x392400

の下位バイトsuperviewは 0x00 であることに注意してください。ポインターを a にキャストしようとしたときに何が起こるかについては詳しく調べていませんBOOLが、 aBOOLは本質的に acharであるため、コンパイラーが下位バイトだけを調べてもまったく驚かないでしょう。代わりにこれを試してください:

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

1) 実際に機能する、2) やろうとしていることをよりよく伝える、という 2 つの点で優れています。

于 2012-09-24T01:01:34.783 に答える