2011-02-07 48 views
0

我正在编写一个简单的Cocoa应用程序,没有核心数据或多个文档支持。在Mac Pro上运行,OS X 10.6.6,Xcode 3.2.3。当调用NSOpenPanel的runModal时,我的应用程序不会正确终止

我减少了我的应用程序下面的代码在我AppDelegate类:

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

    return; 
} 

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

根据我正在阅读的所有信息,我不应该做任何事情才能使其正确运行。我已经在开放面板的使用下载了几个例子,但大多数使用已弃用的打开模式的方法给出了附加信息作为参数。 FWIW,我尝试了这些方法,并且仍然看到相同的结果。

最后一个项目,当打开对话框出现时,我会看到一个消息框,如果我希望我的应用程序能够接收传入连接,就会向我询问一些事情。该对话框很快消失。我不知道这是否是我的问题的一部分。 [更新 - 这涉及我的防火墙被打开。]

是的,我在Objective C相当新,但不是在编程一般。任何智慧的话都非常感谢!

2011.02.07 - 更新:

我已经走过线调试线无事。控制台窗口中没有任何程序失败的迹象。

我说调试器在[Command + Q]后仍然是活动的,因为停止进程工具栏按钮仍然是按照Break按钮启用的。此外,控制台指出在我告诉应用程序终止(通过菜单或键盘命令)它仍在运行之后。以下是从开始运行到完成控制台输出后退出应用程序。

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

活动监视器(系统工具)将显示我的应用程序终止(不再显示为一个过程),但调试器仍然不会过渡到“编辑”模式 - 如果我告诉Xcode中再次运行调试器它会问我是否可以停止当前的调试会话。如果我在Windows中,我会开始寻找后台线程来保持进程活着,但据我所知,NSOpenPanel不应该这样做。

我已进一步简化程序,以什么比创造一个全新的Cocoa应用程序,并插入代码段的上方更多 - 没有其他的补充,以任何方式模板项目或更新。

最后,当应用程序在泄漏性能工具下运行时,当面板创建但从未使用时,一切运行正常。虽然在创建并实际使用时,在运行结束时,我会在工具“task_for_pid权限不足(leakagent64)”中收到以下消息。谷歌搜索这伤害。如果我读得对,调试器没有足够的权限来完全终止目标进程?现在听起来很愚蠢,但是......这没有道理!

另一个更新 - 我只是下载并运行游乐园里,也使用NSOpenPanel SDK的示例应用程序之一。我不觉得特别。它表现出同样的确切行为。所以,从这个结论来看,苹果公司在他们的代码中存在一个bug,我的机器很特别,并且搞砸了,最后,这不是我的代码有问题。这是最好的部分。明天,我将使用朋友Mac,看看他的盒子上是否展示了同样的行为。

这太奇怪了。

+0

当你在该方法中抛出一个虚拟的`NSLog`调用或断点:你看到控制台上有任何输出/是否断点?我正在考虑您提到的对话框,是要求您确认将调试器附加到您的应用程序的对话框。 – danyowdee 2011-02-07 12:36:37

+0

@danyowdee请参阅上文中的更新。提到的对话框(不是OpenPanel)是指允许远程/防火墙访问,我相信。我会在这里用Google搜索一下。 – Userdano 2011-02-08 00:53:51

回答

0

该调试器具体说什么?您的程序可能会崩溃,所以调试器会向您显示关于崩溃的信息。

如果您不想尝试运行Open面板,该怎么办?

1

我重新启动了我的盒子,把它拿来工作,发现它像一个魅力工作!我会认为这是固定的,与工作时相比,与家中的任何其他连接设备无关。

如果它在家中重新展示,那么这是一个网络/设备问题。非常感谢您的意见和建议!非常感谢。

相关问题