我一直在拼命想解决这个问题。
我的应用程序使用了NSDocument、NSDocumentController和NSWindowController的子类。问题是,当我创建一个文档并进行修改时,如果我以相同的方式创建了多个文档,如果我在文档未保存时选择退出,我会得到正确的对话框,询问我是否要审阅未保存的文档,取消或不保存,但每当我选择审阅然后保存文档时,我都可以保存,但在保存第一个文档后,首先,该文档不会关闭,也不会要求我保存其他文档。最重要的是,我的应用程序的退出菜单项变成灰色。
我创建了另一个骨架应用程序来做同样的事情,当然,一切都正常工作。我在nib文件中检查了我的连接,没有看到任何错误,或者与测试应用程序不同。尽管在我的应用程序中有更多的功能。
我目前没有重写reviewUnsavedDocumentsWithAlertTitle:cancellable:delegate:didReviewAllSelector:contextInfo:方法,但是当我重写时,我得到了同样的问题,因为我在做了一些特殊的清理工作后调用了它的超级版本。但同样,不覆盖它也会产生相同的结果。
我确实注意到的一件事是,在我自己的应用程序中,当我运行它时,我在日志中得到以下消息,而我的测试应用程序中没有得到这些消息:
[Switching to process 9997 thread 0x7667]
[Switching to process 9997 thread 0x903]这让我看起来像是在不知情的情况下做了一些多线程的事情。我的测试应用程序不会切换到其他线程。
我不确定如何检查我所有的连接是否都正常,以及为什么这些线程被切换到这些线程以及它们来自哪里。
因为我得到了错误,不管是不是,我覆盖了像上面那样的NSDocumentController方法或closeAllDocumentsWithDelegate:didCloseAllSelector:contextInfo:,我认为错误来自于其他地方。
也许我的NSDocument子类的保存方法造成了这个问题,但一旦保存发生,它们就会返回适当的值,我没有得到任何错误,文件也都很好。
我想重写-didCloseAllSelector或-didReviewAllSelector,但我对此有点疑问。我不确定如何构建该方法,因为如下所示:
- (void)documentController:(NSDocumentController *)controller
didCloseAll:(BOOL)didCloseAll contextInfo:(void *)contextInfo;
{
NSLog(@"All documents closed");
}从未被调用过。这是一种症状吗?对永远不会被调用的-didReviewAllSelecter进行了同样的尝试。
发布于 2011-05-16 07:46:48
最后,我在我的"NSDocument“子类中重写了一个我不应该有的方法。移除它可以修复它。
我想你必须非常小心你要覆盖的东西!
方法是writeToFile:ofType:originalFile:saveOperation:,我不再需要这样做了。
不确定到底是哪里出了问题,但这可能会帮助其他人知道如何查看。
https://stackoverflow.com/questions/5795943
复制相似问题