我正在嘗試爲OS X構建一個基本的動態庫,它只是顯示打開文件的對話框。 我的代碼看起來是這樣的:MacOSX下奇怪的文件對話框
NSOpenPanel * dlg = [NSOpenPanel openPanel];
...//setting title and other properties for dlg
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_main_queue(),^
{
resButton = [dlg runModal];
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
if (resButton == NSFileHandlingPanelOKButton)//resButton is global
{...}
現在,雖然這基本工作,一切都有點過:
-The對話從來沒有完全初始化兩次以同樣的方式(不同的初始目錄,佈局模式。 ..)。
- 有時初始目錄顯示爲空,直到我再次選擇另一個和第一個。
- 「右鍵單擊」菜單不會顯示。
- 滾動反彈效果不起作用(!!!)。我可以無限地向下滾動,直到一切消失。
- 在列模式下,預覽不起作用(加載圖標將永遠轉動),儘管在大圖標模式下查看時,圖像具有正確的預覽。
這就像有一個整體更新線程沒有運行。它可能與調用lib的奇怪上下文相關聯:從使用JNA的Java程序中。但我希望,也許有人一個小竅門,可以解決的事情,像「只是調用[系統startUpdateTask]」什麼都知道:)
感謝所有幫助
如果將所有'dispatch_'代碼替換爲塊的主體'resButton = [dlg runModal];'?畢竟... runModal是一個同步調用... – CRD
@CRD沒有調度的東西,它崩潰了一個例外,其中appkit抱怨我沒有使用「線程0」 – schmop
你需要從主線程調用它......不知道你爲什麼要使用調度隊列。使用performSelectorOnMainThread –