我不太确定基于文档的应用程序是如何工作的。 我在Mainmenu.xib中为NSObject创建了一些动作。当用户点击“文件>新”时调用其中一个:
-(IBAction) newDocument:(id)sender{
Document* newDoc =[[Document alloc] init];
[[NSDocumentController sharedDocumentController]addDocument:newDoc];
[newDoc addWindowController: [[NSWindowController alloc] initWithWindowNibName:[newDoc windowNibName] owner:newDoc]];
[newDoc showWindows];
}
我在openDocument:(id)发送者操作中也有这个代码,它执行相同的操作但当然加载数据以定义应用程序工作区。
如果我运行应用程序,它会显示一个空白文档,而不会调用newDocument操作。我不知道如何停止默认空白文档并设置newDocument:被调用。 然后,如果我做openDocument:也是(所以我有两个文件,一个空白,一个没有),我在第二个文件上做了一些操作,它也在第一个空白文件中复制。 我仔细检查代表,文件所有者,以及 - (void)windowDidBecomeMain:(NSNotification *)通知是否返回不同的指针,所有似乎都没问题。 可能我不理解基于文档的应用程序工作流程,但我已阅读Apple指南和其他说明。我错过了什么?
答案 0 :(得分:1)
当用户做某事时,会调用IBAction方法。所以这不是在应用程序启动时从系统调用的。
您可以使用-applicationShouldOpenUntitledFile:
(NSApplicationDelegate
)自定义应用启动时的行为,这可能是您的下一个问题 - -applicationShouldHandleReopen:hasVisibleWindows:
(NSApplicationDelegate
)。不建议在两种情况下更改行为。
查看您的操作方法,我认为没有理由,为什么要自定义它。
自动创建文档类的实例。
您可以在文档子类中为它创建一个窗口控制器。这是记录在案的。
让NSDocumentController
为您完成工作。默认行为有什么问题?
答案 1 :(得分:0)
没有。我认为是困惑而不是唯一的问题是关于发布观察者通知。当您为NSDocument通知调用close消息时,观察者仍然会持续存在。在ARC工作我很想念这一点。 所以这是我的问题的解决方案。无论如何,谢谢你。