Когда я показываю NSAlert, как это, я сразу получаю ответ:
int response;
NSAlert *alert = [NSAlert alertWithMessageText:... ...];
response = [alert runModal];
Проблема в том, что это приложение-модальное, а мое приложение основано на документе. Я показываю предупреждение в текущем окне документа, используя листы, например:
int response;
NSAlert *alert = [NSAlert alertWithMessageText:... ...];
[alert beginSheetModalForWindow:aWindow
modalDelegate:self
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
contextInfo:&response];
//elsewhere
- (void) alertDidEnd:(NSAlert *) alert returnCode:(int) returnCode contextInfo:(int *) contextInfo
{
*contextInfo = returnCode;
}
Единственная проблема заключается в том, что beginSheetModalForWindow:
возвращает сразу, поэтому я не могу надежно задавать пользователю вопрос и ждать ответа. Это не было бы большой проблемой, если бы я мог разделить задачу на две области, но я не могу.
У меня есть цикл, который обрабатывает около 40 различных объектов (которые находятся в дереве). Если один объект выходит из строя, я хочу, чтобы предупреждение отображалось и запрашивало у пользователя, продолжать или прерывать (продолжить обработку в текущей ветке), но поскольку мое приложение основано на документе, в Руководстве пользователя Apple по физическому интерфейсу требуется использовать листы, когда предупреждение специфичный для документа.
Как я могу отобразить лист предупреждений и дождаться ответа?