В вашем коде NSAlert добавьте
NSModalSession session = [NSApp beginModalSessionForWindow:theWindow];
[NSApp runModalSession:session];
// NSAlert stuff here ...
В ваш обратный вызов didEnd добавьте
[NSApp endModalSession:session];
Подробнее о модальных окнах читайте в разделе NSApplication"Управление циклом событий".
Обновление:
Вот пример кода из документа Apple, показывающий, как запустить модальный режим без обратных вызовов.
NSModalSession session = [NSApp beginModalSessionForWindow:theWindow];
for (;;) {
if ([NSApp runModalSession:session] != NSRunContinuesResponse)
break;
[self doSomeWork];
}
[NSApp endModalSession:session];