gpt4 book ai didi

objective-c - 从 NSViewController 设置 NSWindow 内容 View

转载 作者:行者123 更新时间:2023-12-03 16:36:01 36 4
gpt4 key购买 nike

在我的应用程序委托(delegate)中,我加载 MainViewController 的“MainView”,如下所示:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

MainViewController *mainvc = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
[self.window setContentView:mainvc.view];
}

在“MainView”中,我有一个按钮连接到以下IBAction 方法:

- (IBAction)switchToOneView:(id)sender {

OneViewController *onevc = [[OneViewController alloc] initWithNibName:@"OneView" bundle:nil];
[self.view.window setContentView:onevc.view];
}

我想使用此按钮更改主窗口的内容 View 。不幸的是,这不起作用,我收到以下错误:

[NSLock switchToOneView:]: unrecognized selector sent to instance 0x6000000c5b00

关于如何切换 NSWindow 的内容 View 与 NSViewController 的 View 有什么建议吗?

这是我想要实现的目标的图表:

enter image description here

“MainView”中的按钮会将内容 View 更改为“OneView”或“TwoView”。加载该 View 后,我想单击该 View 中的按钮将其删除并返回到“MainView”。

最佳答案

在大多数情况下,您收到的错误表明存在内存管理错误。这意味着消息 switchToOneView: 已发送到类 NSLock 的对象。毫不奇怪,NSLock 无法识别该消息。

那么,发送 switchToOneView: 的按钮连接到什么目标?不管那是什么,它已经被释放了。另一个对象(NSLock 的实例)偶然被分配到用于保存目标的地址。

我怀疑该按钮的目标是MainViewController。由于在 -applicationDidFinishLaunching: 之后您不再继续持有对该 Controller 的强引用,ARC 已完全释放它,导致它被释放。

在 Zombies 工具下运行您的应用程序会告诉您肯定的结果。

关于objective-c - 从 NSViewController 设置 NSWindow 内容 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23851105/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com