【问题标题】:Set NSWindow content view from NSViewController从 NSViewController 设置 NSWindow 内容视图
【发布时间】:2014-05-25 01:07:02
【问题描述】:

在我的 App 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];
}

我想用这个按钮来改变主窗口的内容视图。不幸的是,这不起作用,我收到以下错误:

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

关于如何将NSWindow 的内容视图切换到NSViewController 的视图有什么建议吗?

这是我想要完成的图表:

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

【问题讨论】:

    标签: objective-c cocoa nswindow nsviewcontroller


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多