objective-c - 窗口setContentView崩溃?

标签 objective-c cocoa

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

[_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 个按钮。每当我按下按钮时, View 都会交换,但随后立即崩溃。

有人知道为什么吗?

谢谢大家

编辑:这是我现在拥有的代码:

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

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

进入全屏工作正常,但是当我调用 exitFullscreen 时,窗口变为空白,然后导致以下崩溃:

crash image

非常感谢任何帮助!

最佳答案

发布的代码无法编译。缺少冒号或者我无法以其他方式理解方法签名。

其次,[window contentView] 返回一个 NSView。然后,您可以在其上调用 -view 方法。那是什么? NSView 没有这样的方法。从上下文来看,您的意思是在 oldView 中保存实际的旧内容 View ,那么为什么要调用 [window contentView] 之外的内容呢?

无论如何,窗口保留其内容 View 。但是,当您换入新内容 View 时,它会释放旧内容 View 并保留新内容 View 。如果您使用 ARC 并且 oldView 不是 __strong 或者您没有使用 ARC,则旧内容 View 不会被任何内容保留并被释放。

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

关于objective-c - 窗口setContentView崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10365056/

相关文章:

objective-c - Mac OS X 10.6 API 报告光圈的 EXIF 数据不正确

ios - 通过点击 View 打开文本文件

ios - 在 iOS 应用程序中添加自动布局 subview 时高度错误

ios 动态改变 View 的大小

iphone - 如何使用/实现 Tapku Day View 日历?

objective-c - 来自 observeValueForKeyPath :ofObject:change:context: 的参数

iphone - 将 AM/PM 添加到日期选择器?

iphone - 我们可以在每个屏幕的顶部放置一个静态图像横幅图像吗?

objective-c - 将 Objective-C 中的窗口标题更改为文本框中的标题?

macos - -[NSButton setImage :] only redraws the first time it's called