NSDocumentController未在Cocoa / Objective-C中审核未保存的文档时正确退出应用程序

时间:2011-04-26 20:17:20

标签: cocoa

我一直在试图解决这个问题的墙上敲我的头。

我的应用使用NSDocumentNSDocumentControllerNSWindowController的子类。问题在于,当我创建文档并进行修改时,如果我以相同的方式创建多个文档,如果我在文档未保存时选择退出,我会得到正确的对话框以询问我是否要查看未保存的文档,取消或不保存,但每当我选择查看然后保存文档时,我都会保存,但保存第一个文档后,首先,该文档未关闭,我不会要求保存其他文档。除此之外,我的应用程序的退出菜单项变为灰色。

我创建了另一个骨架应用程序来做同样的事情,当然,一切正常。我在nib文件中检查了我的连接,并且看不到任何错误,或者与测试应用程序不同。虽然我的应用程序中还有很多内容。

我目前没有覆盖reviewUnsavedDocumentsWithAlertTitle:cancellable:delegate:didReviewAllSelector:contextInfo:方法,但是当我这样做时,我遇到了同样的问题,因为在做了一些特殊的清理工作之后我称之为Super的版本。但同样,不会覆盖这会产生相同的结果。

我注意到的一件事是,在我自己的应用程序中,我在运行它时会在日志中收到以下消息,我在测试应用程序中没有这些消息:

[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尝试了同样的事情。

1 个答案:

答案 0 :(得分:2)

最后,我覆盖了我的“NSDocument”子类中的一个方法,我不应该这样做。删除此修复它。

我猜你必须非常小心你的覆盖!

方法是writeToFile:ofType:originalFile:saveOperation:我不再需要这样做。

不确定到底出了什么问题,但可能会让其他人知道看到那里。