NSWindowController 的文档在什么情况下可以更改?
Under what conditions can an NSWindowController's document change?
我的应用程序观察其 NSWindowController
的 document
属性 并在设置时执行一些 UI 设置。设置后,由于更改将很难重建 UI(出于内部原因)。
一旦 NSWindowController
将其 document
属性 设置为打开的文档,在什么情况下系统会 更改 属性 到一个新的 NSDocument
实例(即文档是否会被换出)?我从来没有观察到它发生,但我可以想象版本或 iCloud 同步等功能导致 window 控制器的文档被交换为新文档。但是,NSWindowController
生命周期的文档似乎没有涉及这个问题。
一旦设置就不会改变。 NSWindowController 通过 addWindowController
方法获取其文档。每个 new/opened 文档都会创建自己的 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];
}
}
我的应用程序观察其 NSWindowController
的 document
属性 并在设置时执行一些 UI 设置。设置后,由于更改将很难重建 UI(出于内部原因)。
一旦 NSWindowController
将其 document
属性 设置为打开的文档,在什么情况下系统会 更改 属性 到一个新的 NSDocument
实例(即文档是否会被换出)?我从来没有观察到它发生,但我可以想象版本或 iCloud 同步等功能导致 window 控制器的文档被交换为新文档。但是,NSWindowController
生命周期的文档似乎没有涉及这个问题。
一旦设置就不会改变。 NSWindowController 通过 addWindowController
方法获取其文档。每个 new/opened 文档都会创建自己的 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];
}
}