当用户在基于我的 Cocoa 应用程序中创建新文档时NSDocument,我希望新文档窗口显示一个表单,用户可以在其中设置一些初始文档参数。
但是,当通过“文件”>“打开”加载现有文档时,不应显示此工作表。
是否有任何现有的机制可以用来实现这一点?或者有什么推荐的方法吗?
当用户在基于我的 Cocoa 应用程序中创建新文档时NSDocument,我希望新文档窗口显示一个表单,用户可以在其中设置一些初始文档参数。
但是,当通过“文件”>“打开”加载现有文档时,不应显示此工作表。
是否有任何现有的机制可以用来实现这一点?或者有什么推荐的方法吗?
initWithType:error:在您的子类中覆盖NSDocument。
从文档(请参阅NSDocument 类参考):
您可以重写此方法以执行在创建新文档时必须执行但在打开现有文档时不应执行的初始化。
Jay 在他的回答中正确地指出,为了确定NSDocument子类的实例是否代表新文档而不是从文件中加载的, initWithType:error:必须被覆盖,它只会被新文档调用。但是不幸的是,在那里启动工作表是行不通的,因为此时尚未创建窗口initWithType:error:。
获得此工作的缺失链接是将名为 eg 的实例变量设置newDocument为YESin initWithType:error:。[NSApp beginSheet:…]那么,对的实际调用必须在 中进行windowDidBecomeKey:。此外,newDocument应将变量设置为NO那里,以防止每次窗口再次成为键时工作表都重新出现。