Я просто столкнулся с той же проблемой. Хотя решения не найдено, есть как минимум 2 обходных пути, о которых я подумал.
Петля "раствор"
Сразу после вызова UIAlert вы запускаете цикл, который ищет изменения в переменной, которая является глобальной для вашего объекта (не для всего проекта, обратите внимание), эта переменная - та, которую вы задали в делегате UIAlert, который принимает ответы. Поэтому в основном вы ждете «is A == 1, если не DoEvents» и зацикливаетесь на нем.
Затем на делегате вы делаете A = 1, когда у вас есть ответ
и прежде чем кто-то скажет, что в Какао нет DoEvents:
void MyTestClass::DoEvents()
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate distantPast]
inMode:NSDefaultRunLoopMode
dequeue:YES];
if (event) {
[NSApp sendEvent:event];
[NSApp updateWindows];
}
[pool release];
}
Делегатское решение
Вместо того, чтобы иметь код, который имеет дело с Ответом A, B или C, в функции, которая вызывает Alert, используйте код в самом делегате.
Надеюсь, это поможет.
Я использовал второй в моем проекте, и он работал.