gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:06:42 33 4
gpt4 key购买 nike

我一直在用头撞墙试图解决这个问题。

我的应用程序使用 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 尝试了相同的操作,但从未被调用。

最佳答案

最后,我重写了“NSDocument”子类中的一个我不应该拥有的方法。删除这个修复了它。

我想你必须非常小心你覆盖的内容!

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

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

关于cocoa - NSDocumentController 在查看 Cocoa/Objective-C 中未保存的文档时未正确退出应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795943/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com