在什么条件下NSWindowController的文档可以更改?

时间:2019-02-14 15:50:42

标签: cocoa appkit nsdocument nswindowcontroller

我的应用观察其document的{​​{1}}属性,并在设置后执行一些UI设置。设置完成后,由于更改,将很难重建UI(由于内部原因)。

一旦NSWindowController将其NSWindowController属性设置为打开的文档,系统将在什么条件下将该属性更改为新的document实例(即文件是否会被换出)?我从未观察到它的发生,但是我可以想象诸如版本或iCloud同步之类的功能会导致窗口控制器的文档被替换为新文档。但是,关于NSDocument生命周期的文档似乎与这个问题无关。

1 个答案:

答案 0 :(得分:2)

设置后不会更改。 NSWindowController通过addWindowController方法获取其文档。每个新打开的文档都会创建自己的windowController。文档实例不会随iCloud或revertChanges更改。如何同步文档及其视图(重画)取决于您。

/* Create the user interface for this document, but don't show it yet. 
The default implementation of this method invokes [self windowNibName], 
creates a new window controller using the resulting nib name (if it is not nil), 
specifying this document as the nib file's owner, and then invokes [self addWindowController:theNewWindowController] to attach it. You can override 
this method to use a custom subclass of NSWindowController or to create more 
than one window controller right away. NSDocumentController invokes this method 
when creating or opening new documents.
*/


// e.g. override 
- (void)makeWindowControllers
{
    if ([[self windowControllers] count] == 0) {
        MainWindowController *controller = [[MainWindowController alloc] init];
        [self addWindowController:controller];
    }
}