Когда я отображать NSAlert, как это, я получаю ответ сразу:Подождите, пока [NSAlert beginSheetModalForWindow: ...];
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 по физическому интерфейсу требуется использовать листы, когда предупреждение специфичный для документа.
Как я могу отобразить лист предупреждений и дождаться ответа?
Нитки, в конечном счете, я должен идти. Я полагаю. Дерево объектов в конечном итоге станет больше и сложнее. – dreamlax
Не видя своего приложения, это, очевидно, трудно сказать, но действительно ли вы уверены, что вам нужны потоки?Я никогда не сталкивался с тем случаем, когда ответ в методе обратного вызова был более сложным, чем потоковое приложение. –