0
我有一個顯示NSAlert窗口的多線程OSX應用程序。大多數情況下用戶界面看起來不錯,但有時它通過錯位放置看起來非常難看的按鈕來破壞用戶界面。NSAlert顯示錯誤的按鈕
正如我不能阻止主線程,不希望將其顯示爲模態。我使用下面的代碼。
NSAlert* alert = [NSAlert alertWithMessageText:title defaultButton:defaultBtn alternateButton:alterBtn otherButton:otherBtn informativeTextWithFormat:msg];
[alert setAlertStyle:style];
BOOL isMainThread = (dispatch_get_current_queue() == dispatch_get_main_queue());
if(isMainThread)
[alert layout];
else
{
dispatch_sync(dispatch_get_main_queue(), ^{
[alert layout];
});
}
NSModalSession session = [NSApp beginModalSessionForWindow:alert.window];
__block NSUInteger response;
for (;;) {
if(isMainThread)
{
response = [NSApp runModalSession:session];
}
else
{
dispatch_sync(dispatch_get_main_queue(), ^{
response = [NSApp runModalSession:session];
});
}
if(response != NSRunContinuesResponse)
break;
}
任何想法爲什麼會發生這種情況?
根本不應該使用模態會話。該特定的API是非正式的棄用。 –