NSPanel和beginSheet deallocs其他窗口和视图控制器

时间:2015-03-30 15:40:23

标签: objective-c cocoa modal-dialog

我有一个包含两个视图的主窗口(也是相应的控制器),我在主窗口中显示一个NSPanel。 NSPanel通过IB连接,在我的主窗口控制器中,我启动模式会话,如下所示

MainWindowController.m

  [self.window beginSheet:sheet completionHandler:^(NSModalResponse returnCode) {
        NSLog(@"End...");
    }];

我在NSNotificationCenter遇到问题,观察员被解除分配,所以我添加了所有的VC

MainWindowController.m + SomeOtherInMainWindowController.m

- (void)dealloc {
    NSLog(@"%s",__PRETTY_FUNCTION__);
}

当我以模态方式显示工作表时,我可以看到它们被解除分配。 这当然会产生问题,因为其他VC是根据与工作表的交互发布通知的观察者。

有人可以解释一下这种行为。

解决

事实证明,我之前尝试从单独的XIB加载工作表仍然存在于此行代码中。

//    [[NSBundle mainBundle] loadNibNamed:@"SheetWindow" owner:self topLevelObjects:nil];

评论说明解决了这个问题。

1 个答案:

答案 0 :(得分:0)

似乎您没有对控制器进行一些强引用,因此ARC会释放它们,最有可能是在自动释放池耗尽时。