私はboost C++で作成されたスレッドからNSOpenPanelを呼び出しています。それは、オブジェクトをクリックしているパネルが不規則に動作し、マウスによく反応しないC++のNSOpenPanelブーストスレッド
は、トップレベルのコンボボックスをクリックしたときの応答性を改善し、いつか何もしません。
は私が独自のループを実行しているの世話をする必要がありrunModalForDirectoryをやっている別の実行ループを実行するようにしまし行います。
私はまた、メインスレッドでパネルを表示するにはperformSelectorOnMainThreadが、まだ動作は同じであるん別々にObjCクラスを作成しました。
[ps performSelectorOnMainThread:@selector(showOpenPanel) withObject:nil
waitUntilDone:YES
modes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
私もwaitUntilDoneで試してみた:NOのいずれか助けていないCFRunLoopRunInModeを実行しています。
- (bool) showOpenPanel
{
NSOpenPanel *op = [NSOpenPanel openPanel];
[op setAllowsMultipleSelection:YES];
[op setTitle:@"Choose File"];
[op setMessage:@"Choose file for Importing."];
[op setFloatingPanel:true];
bool result =[op runModalForDirectory:NSHomeDirectory() file:nil types:self.fileTypes];
if (result == NSOKButton) {
[self setSelectedFiles:[op filenames]];
[self setLastShowResult:true];
}
else {
[self setLastShowResult:false];
}
[self setPanelIsDone:true];
return self.lastShowResult;
}
コードを編集して – user549164
を受け入れていますyouranswer私が投稿したコードで動作するようになっています。 – user549164