2011-02-07 61 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

我重新啓動了我的盒子,把它拿來工作,發現它像一個魅力工作!我會認爲這是固定的,與工作時相比,與家中的任何其他連接設備無關。

如果它在家中重新展示,那麼這是一個網絡/設備問題。非常感謝您的意見和建議!非常感謝。

相關問題