0

理由はわかりませんが、単純なことをするたびに:

[_window setContentView:newView];

「gdb」クラッシュが発生します。

「enterFullscreen」と「exitFullscreen」の 2 つのメソッドがあり、_window はメインの NSWindow です。

NSView *oldView;

- (void)enterFullScreen:(NSView*)newView
{
    oldView = [[_window contentView] view];
    [_window setContentView:newView];
}

- (void)exitFullscreen:(NSView*)newView
{
    [_window setContentView:oldView];
}

これらの 2 つのメソッドは、IBAction を使用して 2 つのプッシュ ボタンにリンクされています。ボタンを押すたびにビューが切り替わりますが、すぐにクラッシュします。

誰かが理由を知っていますか?

みんな、ありがとう

編集:これは私が今持っているコードです:

-(void)enterFullscreen(NSView*)newView
{
    oldView = [[NSView alloc] init];
    oldView = [_window contentView];
    [newView removeFromSuperview];
    [_window setContentView:newView];
}

- (void)exitFullscreen:(NSView*)newView
{
    [_window setContentView:oldView];
}

フルスクリーンに入ると問題なく動作しますが、exitFullscreen を呼び出すと、ウィンドウが空白になり、次のクラッシュが発生します。

クラッシュ画像

どんな助けでも大歓迎です!

4

2 に答える 2

2

投稿されたコードはコンパイルされません。コロンが欠落しているか、メソッドのシグネチャを他の方法で理解していません。

次に、 を[window contentView]返しますNSView-view次に、その上でメソッドを呼び出します。あれは何でしょう? NSViewにはそのような方法はありません。コンテキストから、実際の古いコンテンツ ビューを に保存するつもりなのにoldView、なぜそれ以上のものを呼び出しているの[window contentView]でしょうか。

とにかく、ウィンドウはそのコンテンツ ビューを保持します。ただし、新しいコンテンツ ビューにスワップすると、古いコンテンツ ビューが解放され、新しいコンテンツ ビューが保持されます。ARC を使用していて使用していない場合、または ARC を使用しoldView__strongいない場合、古いコンテンツ ビューは何にも保持されず、割り当てが解除されます。

それでも説明できない場合は、正確な例外、クラッシュ、またはエラー メッセージを投稿し、それがどこで発生しているかを示す必要があります。

于 2012-04-28T16:05:35.623 に答える
0

setContentView; 自動解放メッセージを送信します。このメソッドにより、古いコンテンツ ビューが解放されます。再利用する場合は、このメッセージを送信する前に保持し、別の NSWindow オブジェクトまたは NSView に追加するときに必要に応じて解放してください。次のようなことを試してください。

  [newView retain];
  [oldView removeFromSuperview];
  [_window setContentView:newView];
  [newView release];
于 2012-04-28T16:07:18.777 に答える