我不知道为什么,但只要我做一个简单的事情:
[_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];
}
这两种方法通过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时,Window变为空白然后导致以下崩溃:
任何帮助都非常感谢!
答案 0 :(得分:2)
发布的代码无法编译。有缺少冒号或我不以其他方式理解方法签名。
其次,[window contentView]
会返回NSView
。然后,您可以在其上调用-view
方法。那是什么? NSView
没有这样的方法。从上下文来看,您的意思是在oldView
中保存实际的旧内容视图,那么为什么要调用[window contentView]
以外的内容?
无论如何,窗口保留其内容视图。但是,当您交换新的内容视图时,它会释放旧的内容视图并保留新的内容视图。如果您使用的是ARC且oldView
不是__strong
,或者您没有使用ARC,那么旧的内容视图不会被任何内容保留,并且会被取消分配。
如果这不能解释它,您需要发布确切的异常,崩溃或错误消息并显示它发生的位置。
答案 1 :(得分:0)
的setContentView;发送自动回复消息。此方法导致旧内容视图被释放;如果您打算重复使用它,请确保在发送此消息之前保留它,并在将其添加到另一个NSWindow对象或NSView时适当地释放它。 尝试以下内容。
[newView retain];
[oldView removeFromSuperview];
[_window setContentView:newView];
[newView release];