基于Cocoa文档的应用程序,NSWindowController子类为"主窗口"

时间:2014-08-19 13:46:39

标签: macos nsdocument nswindowcontroller

我有一个基于Cocoa文档的应用程序。我想要"主窗口"由我的NSWindowController子类管理。我创建了子类,并将其接口布局在一个同名的.xib文件中。我最终想要的行为与NSDocument管理窗口的行为相同,而是由NSWindowController管理。

首先,我该怎么办?其次,在采用这种方法时,我需要考虑一些特殊的事情,例如如何处理打开和保存?

1 个答案:

答案 0 :(得分:5)

  1. 使用您自己的windowController实例覆盖makeWindowControllers

    //Lazy instantiation of window controller
    - (WindowController *)controller {
      if (!_controller) {
          _controller = [[WindowController alloc] initWithWindowNibName:@"Document"];
      }
    
      return _controller;
    }
    
    - (void)makeWindowControllers {
      [self addWindowController:self.controller];
    }
    
  2. 评论windowNibName& windowControllerDidLoadNib:aController方法

    //- (NSString *)windowNibName
    //{
    //  // Override returning the nib file name of the document
    //  // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead.
    //  return @"Document";
    //}
    
    //- (void)windowControllerDidLoadNib:(NSWindowController *)aController
    //{
    //  [super windowControllerDidLoadNib:aController];
    //  // Add any code here that needs to be executed once the windowController has loaded the document's window.
    //}
    
  3. 将Document.xib文件所有者类从NSDocument更改为WindowController

  4. XIB renaming

    您可以从WindowController向文档类发送消息(调用方法)。

    另外请确保您理解此图表:

    enter image description here