Когда я отображаю 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 предписывается использовать листы, когда предупреждение специфичные для документа.
Как я могу отобразить лист предупреждения и ждать ответа?