我正在编写一个简单的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将消失,但调试器将指示应用程序仍在运行(控制台输出也是如此)。
根据我正在阅读的所有信息,我不应该做任何其他事情才能使其正常运行。我已经在Open Panel的用法上下载了几个例子,但是大多数使用了打开模态的已弃用的方法,并提供了附加信息作为参数。 FWIW,我尝试了这些方法,但仍然看到相同的结果。
最后一项,当出现“打开”对话框时,我立即看到一个消息框,询问我是否需要我的应用程序接收传入连接。对话框很快消失。我不知道这是否是我问题的一部分。 [更新 - 这涉及我的防火墙已开启。]
是的,我在目标C上相当新,但一般来说不是编程。任何智慧的话都非常感谢!
2011.02.07 - 更新:
我已经逐行调试了调试器。控制台窗口中没有任何程序失败的迹象。
我说调试器在[Command + Q]之后仍然处于活动状态,因为Stop Process工具栏按钮仍然启用,就像Break按钮一样。此外,控制台指示在我告诉应用程序终止(通过菜单或键盘命令)它仍在运行之后。以下是从运行开始到退出应用程序后的完整控制台输出。
Program loaded.
run
[Switching to process 62370]
Running...
活动监视器(系统工具)将显示我的应用程序终止(不再显示为进程)但调试器仍然不会转换为“编辑”模式 - 如果我告诉Xcode再次运行调试器,它会询问我,如果可以停止当前的调试会话。如果我在Windows中,我会开始寻找后台线程来保持进程活着但据我所知,NSOpenPanel不应该做那样的事情。
我进一步将程序简化为创建一个全新的Cocoa应用程序并在上面插入代码片段 - 没有其他任何添加到模板项目或以任何方式更新。
最后,当应用程序在Leaks Performance Tool下运行时,在创建面板但从未使用过时,一切运行正常。虽然在创建和实际使用时,但在运行结束时,我将在工具中获得以下消息“tasks_for_pid特权(leaknt64)不足”。谷歌搜索这个伤害。如果我读得正确,调试器没有足够的权限来完全杀死目标进程???现在这听起来很愚蠢,但......没有意义!
另一个更新 - 我刚刚下载并运行了FunHouse,这是一个同样使用NSOpenPanel的SDK示例应用程序。好吧,我不觉得特别。它表现出相同的确切行为。因此,我得出结论要么Apple在他们的代码中有一个错误,我的机器是特殊的并且搞砸了,最后,这不是我的代码有问题。这是最好的部分。明天,我将使用朋友Mac,看看他的盒子上是否有同样的行为。
这太奇怪了。
答案 0 :(得分:1)
我重新启动了我的盒子,接受了它的工作,发现它就像一个魅力!我认为这是固定的,与在家工作的任何其他连接设备无关。
如果它在家重新展出,那么它就是网络/设备问题。感谢大家的意见和建议!非常感谢。
答案 1 :(得分:0)
具体来说,调试器说什么?您的程序可能会崩溃,因此调试器会向您显示有关崩溃的信息。
如果省略任何运行“打开”面板的尝试怎么办?