0

我不知道为什么,但每当我做一个简单的事情时:

[_window setContentView:newView];

我遇到“gdb”崩溃。

我有两种方法,'enterFullscreen','exitFullscreen',其中 _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 而oldView不是__strong,或者如果您没有使用 ARC,那么旧的内容视图不会被任何东西保留并被释放。

如果这不能解释它,您需要发布确切的异常、崩溃或错误消息并显示它发生的位置。

于 2012-04-28T16:05:35.623 回答
0

设置内容视图;发送自动释放消息。该方法导致旧的内容视图被释放;如果您打算重用它,请务必在发送此消息之前保留它,并在将其添加到另一个 NSWindow 对象或 NSView 时酌情释放它。尝试类似以下的操作。

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