簡體   English   中英

調用NSOpenPanel的runModal時,我的應用程序將無法正確終止

[英]When calling to NSOpenPanel's runModal, my application will not properly terminate

我正在編寫一個簡單的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再次運行調試器,它將詢問我是否單擊確定以停止當前的調試會話。 如果我在Windows中,我將開始尋找使進程保持活動狀態的后台線程,但據我所知,NSOpenPanel不應執行此類操作。

我進一步簡化了程序,只不過是創建了一個全新的Cocoa應用程序並在上面插入了代碼片段-模板項目沒有其他添加或更新。

最后,當應用程序在“泄漏性能工具”下運行時,創建面板但從未使用時,一切運行良好。 創建並實際使用后,在運行結束時,我將在工具“ task_for_pid特權不足(leakagent64)”中收到以下消息。 谷歌搜索這很痛。 如果我沒看錯,調試器沒有足夠的權限來完全殺死目標進程? 現在聽起來很愚蠢,但是...毫無意義!

另一個更新-我剛剛下載並運行FunHouse,這也是也使用NSOpenPanel的SDK示例應用程序之一。 好吧,我不覺得特別。 它表現出相同的確切行為。 因此,我可以得出這樣的結論:要么Apple的代碼中有錯誤,要么我的機器特別混亂,最后是不是我的代碼有問題。 那是最好的部分。 明天,我將使用朋友Mac,看看他的盒子上是否也表現出相同的行為。

這太奇怪了。

我重新啟動盒子,使其正常工作,發現它就像一個魅力一樣! 我將假定此問題是固定的,與工作中的其他設備相比,它與家里的任何其他設備均無關。

如果在家里重新展出,則是網絡/設備問題。 感謝您的輸入和建議! 非常感謝。

具體來說,調試器說什么? 程序可能崩潰了,因此調試器向您顯示有關崩潰的信息。

如果您沒有嘗試運行“打開”面板怎么辦?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM