gpt4 book ai didi

objective-c - 当调用 NSOpenPanel 的 runModal 时,我的应用程序将无法正确终止

转载 作者:行者123 更新时间:2023-12-03 18:02:30 26 4
gpt4 key购买 nike

我正在编写一个简单的Cocoa应用程序,没有核心数据或多文档支持。在 Mac Pro、OS X 10.6.6、Xcode 3.2.3 上运行。

我已将应用程序简化为 AppDelegate 类中的以下代码:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel runModal];

return;
}

我将在调试器中运行我的应用程序。正如预期的那样,将会出现一个不太有用的 OpenPanel。我将单击“取消”,它就会消失。这一切都在预料之中。当我单击 [Command + Q] 退出应用程序时,UI 将消失,但调试器将指示应用程序仍在运行(控制台输出也是如此)。

根据我正在阅读的所有信息,我不需要做任何其他事情就可以使其正常运行。我已经下载了几个有关“打开面板”用法的示例,但大多数都使用已弃用打开模式的方法,以提供附加信息作为参数。 FWIW,我尝试了这些方法,但仍然看到相同的结果。

最后一项,当“打开”对话框出现时,有那么一瞬间,我看到一个消息框,询问我是否希望我的应用程序接收传入连接。对话框很快消失。我不知道这是否是我的问题的一部分。 [更新 - 这涉及我的防火墙被打开的情况。]

是的,我对 Objective C 相当陌生,但对一般编程并不熟悉。非常感谢任何智慧之言!

2011.02.07 - 更新:

我已经逐行运行了调试器,没有发生任何事件。控制台窗口中没有任何程序故障的迹象。

我说调试器在 [Command + Q] 之后仍然处于事件状态,因为“停止进程”工具栏按钮仍然处于启用状态,“中断”按钮也是如此。此外,控制台表明,在我告诉应用程序终止(通过菜单或键盘命令)后,它仍在运行。以下是从运行开始到退出应用程序后的完整控制台输出。

Program loaded.
run
[Switching to process 62370]
Running...

事件监视器(系统工具)将显示我的应用程序正在终止(不再显示为进程),但调试器仍然不会转换到“编辑”模式 - 如果我告诉 Xcode 再次运行调试器,它会询问如果可以停止当前的调试 session ,请告诉我。如果我在 Windows 中,我会开始寻找后台线程来保持进程处于事件状态,但据我所知,NSOpenPanel 不应该做类似的事情。

我进一步简化了程序,只不过是创建一个全新的 Cocoa 应用程序并插入上面的代码片段 - 没有对模板项目进行任何其他添加或以任何方式进行更新。

最后,当应用程序在 Leaks Performance Tool 下运行时,在创建面板但从未使用面板时一切都运行良好。但是,当创建并实际使用时,在运行结束时,我将在工具“insufficient task_for_pid特权(leakagent64)”中收到以下消息。谷歌搜索这很痛苦。如果我没看错的话,调试器没有足够的权限来完全杀死目标进程???现在这听起来很愚蠢但是......这没有意义!

另一个更新 - 我刚刚下载并运行了 FunHouse,它是也使用 NSOpenPanel 的 SDK 示例应用程序之一。嗯,我不觉得很特别吗?它表现出完全相同的行为。因此,我得出的结论是,要么苹果的代码中有错误,要么我的机器很特殊并且很困惑,最后,这不是我的代码有问题。这是最好的部分。明天,我将使用 friend 的 Mac,看看他的机器上是否出现相同的行为。

这也太奇怪了。

最佳答案

我重新启动了我的盒子,让它开始工作,发现它非常有用!我假设这是固定的,与工作时相比,与家里的任何其他连接设备无关。

如果它在家里重新出现,那么就是网络/设备问题。感谢大家的意见和建议!非常感谢。

关于objective-c - 当调用 NSOpenPanel 的 runModal 时,我的应用程序将无法正确终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4917900/

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